Я видел другую тему, и у меня другая проблема. Процесс запускается (видел в диспетчере задач), но папка не открывается на моем экране. В чем дело?
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");
Если ни один из них (кроме того, который выдает исключение) не работает на вашем компьютере, я не думаю, что проблема заключается в коде, но в среде. Если это так, я бы попробовал одно (или оба) из следующего:
Process.Start(path)
активирует окно (может мигать только на панели задач, не выводится на передний план); explorer.exe
+ параметр открывает новое окно всегда впереди (но несколько раз одно и то же окно). Так что у обоих есть предостережения.
Process.Start(@"c:\temp")
должны использоваться с осторожностью. Если c:\temp.com
существует, то c:\temp.com
вместо этого откроется вызов функции . См. Forums.iis.net/p/1239773/2144186.aspx для более подробной информации.
Process.Start(@"c:\temp")
может открыться другая папка, например C:\temp.exe
или C:\temp.cmd
. Смотрите эту проблему, где сама VS демонстрирует ошибочное поведение . Вы можете избежать этого, используя explorer.exe
вариант или (лучше IMO) всегда добавляя a Path.DirectorySeparatorChar
. Например, Process.Start(@"C:\temp\")
.
Просто для полноты, если все, что вы хотите сделать, это открыть папку, используйте это:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Убедитесь, что FileName заканчивается, Path.DirectorySeparatorChar
чтобы он однозначно указывал на папку. (Спасибо @binki.)
Это решение не будет работать для открытия папки и выбора элемента, так как для этого нет глагола.
C:\teste.exe
или C:\teste.cmd
существует, Explorer откроет другую папку вместо той, которую вы намеревались. Чтобы избежать этого, вы можете добавить Path.DirectorySeparatorChar
к пути. Посмотрите, как сама VS делает ту же ошибку .
Verb = "select"
, но, увы, не можете. Независимо, отличный ответ!
Verb = "open"
не была необходима. (Протестировано в Windows, другие ОС могут отличаться.)
.Verbs
отеле по адресуProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Вы используете символ @, который устраняет необходимость экранирования от обратной косой черты.
Удалить @ или заменить \\ на \
Вам не нужен двойной обратный слеш при использовании неэкранированных строк:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Вы должны использовать одну из System.Diagnostics.Process.Start()
перегрузок. Это довольно просто!
Если вы не укажете имя файла процесса, который хотите запустить ( explorer.exe
), система распознает его как допустимый путь к папке и попытается присоединить его к уже запущенному процессу Explorer. В этом случае, если папка уже открыта, Explorer ничего не сделает.
Если вы поместите имя файла процесса (как вы это сделали), система попытается запустить новый экземпляр процесса, передав в качестве параметра вторую строку. Если строка является допустимой папкой, она открывается во вновь созданном процессе, если нет, новый процесс ничего не будет делать.
Я не знаю, как процесс обрабатывает неверные пути к папкам в любом случае. Использование System.IO.Directory.Exists()
должно быть достаточно, чтобы обеспечить это.
Path.DirectorySeparatorChar
. В противном случае, если папка с тем же именем, но .cmd
или, .exe
возможно, и другими суффиксами, также существует, Explorer откроет эту другую папку - или, если это на самом деле исполняемые файлы или сценарии, он запустит их вместо того, чтобы открыть папку, как вы планировали.
Используйте перегруженную версию метода, которая принимает экземпляр ProcessStartInfo, и установите для свойства ProcessWindowStyle значение, которое подходит вам.
Вы избегаете обратной косой черты, когда знак at делает это за вас.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Этот код отлично работает в среде VS2010 и правильно открывает локальную папку, но если вы разместите то же приложение в IIS и попытаетесь открыть, то оно наверняка не получится.
У меня только что была эта проблема, и я узнал почему. моя причина не указана здесь, так что кто-либо еще, кто получает эту проблему, и ни один из них не устраняет ее.
Если вы запустите Visual Studio от имени другого пользователя и попытаетесь использовать Process.Start, он будет работать в контексте этого пользователя, и вы не увидите его на своем экране.
Странный.
Если он не может найти 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 Studio, они могут довольно быстро их съесть. Вы можете добавить столбец в TaskManager, чтобы увидеть, сколько дескрипторов используется каждым процессом.
Для увеличения лимита можно внести изменения в реестр.
Для получения дополнительной информации см. Http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Просто измените путь или объявите его в string