Я видел другую тему, и у меня другая проблема. Процесс запускается (отображается в диспетчере задач), но папка не открывается на моем экране. Что не так?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Я видел другую тему, и у меня другая проблема. Процесс запускается (отображается в диспетчере задач), но папка не открывается на моем экране. Что не так?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Вы уверены, что существует папка "c:\teste
"? Если это не так, откроется проводник, показывающий какую-то папку по умолчанию (в моем случае "C:\Users\[user name]\Documents
" ).
Обновление
Я пробовал следующие варианты:
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
Если ни один из них (ну, кроме того, который вызывает исключение) работает на вашем компьютере, я не думаю, что проблема заключается в коде, но в среде. Если это так, я попробую один (или оба) из следующего:
Просто для полноты, если все, что вы хотите сделать, это открыть папку, используйте это:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Убедитесь, что FileName заканчивается Path.DirectorySeparatorChar
чтобы он однозначно указывал на папку. (Спасибо @binki.)
Это решение не будет работать для открытия папки и выбора элемента, так как для этого нет глагола.
Если вы хотите выбрать файл или папку, вы можете использовать следующее:
Process.Start("explorer.exe", "/select, c:\\teste");
Вы используете символ @, который устраняет необходимость экранирования обратных косых черт.
Удалите @или замените\\на\
Вам не нужна двойная обратная косая черта при использовании неэкранированных строк:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Вы должны использовать одну из перегрузок System.Diagnostics.Process.Start()
. Это довольно просто!
Если вы не укажете имя процесса, который вы хотите запустить (explorer.exe
), система распознает его как допустимый путь к папке и попытается подключить его к уже запущенному процессу проводника. В этом случае, если папка уже открыта, Explorer ничего не сделает.
Если вы поместите имя файла процесса (как и вы), система попытается запустить новый экземпляр процесса, передав вторую строку в качестве параметра. Если строка является допустимой папкой, она открывается во вновь создаваемом процессе, если нет, новый процесс ничего не сделает.
Я не знаю, как в любом случае обрабатываются неверные пути к папкам. Использовать System.IO.Directory.Exists()
должно быть достаточно, чтобы убедиться, что.
Используйте перегруженную версию метода, который принимает экземпляр ProcessStartInfo и устанавливает для свойства ProcessWindowStyle значение, которое работает для вас.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Этот код отлично работает в среде VS2010 и правильно открывает локальную папку, но если вы размещаете одно и то же приложение в IIS и пытаетесь открыть его, то он обязательно сработает.
У меня была эта проблема, и я узнал, почему. моя причина не указана здесь, поэтому кто-то еще, кто получает эту проблему, и ни один из них не исправляет ее.
Если вы запустите Visual Studio в качестве другого пользователя и попытаетесь использовать Process.Start, он будет запущен в контексте пользователей, и вы не увидите его на экране.
Вы избегаете обратную косую черту, когда знак at делает это для вас.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Странно.
Если он не может найти explorer.exe, вы должны получить исключение. Если он не может найти папку, он все равно должен открыть некоторую папку (например, мои документы)
Вы говорите, что в диспетчере задач появляется другая копия Explorer, но вы ее не видите.
Возможно ли, что он открывается за кадром (например, другой монитор)?
Или вы случайно делаете это в неинтерактивном сервисе?
Правильно ли он открывается, когда вы запускаете "explorer.exe c:\teste" из меню "Пуск"? Как долго вы это пробовали? Я вижу подобное поведение, когда на моей машине много процессов и когда я открываю новый процесс (например, говорит IE).. он запускается в диспетчере задач, но не отображается в интерфейсе. Вы пробовали перезапуск?
Следующий код должен открыть новый экземпляр проводника
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
У вас много приложений, запущенных при попытке этого? Иногда я сталкиваюсь с странным поведением, потому что в моей системе заканчиваются дескрипторы GDI, так как у меня так много открытых окон (наши приложения используют много).
Когда это происходит, окна и контекстные меню не появляются, пока я не закрываю что-то, чтобы освободить некоторые дескрипторы GDI.
Предел по умолчанию в XP и Vista равен 10000. Это не редкость для моего DevStudio иметь 1500 GDI-ручек, поэтому, если у вас есть несколько копий Dev-студии, они могут съесть их довольно быстро. Вы можете добавить столбец в TaskManager, чтобы узнать, сколько ручек используется каждым процессом.
Существует реестр, который вы можете сделать, чтобы увеличить лимит.
Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Просто измените путь или объявите его в string