Откройте папку с помощью Process.Start

Я видел другую тему, и у меня другая проблема. Процесс запускается (отображается в диспетчере задач), но папка не открывается на моем экране. Что не так?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");

Ответ 1

Вы уверены, что существует папка "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");

Если ни один из них (ну, кроме того, который вызывает исключение) работает на вашем компьютере, я не думаю, что проблема заключается в коде, но в среде. Если это так, я попробую один (или оба) из следующего:

  • Откройте диалоговое окно "Запуск", введите "explorer.exe" и нажмите enter.
  • Откройте командную строку, введите "explorer.exe" и нажмите enter

Ответ 2

Просто для полноты, если все, что вы хотите сделать, это открыть папку, используйте это:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

Убедитесь, что FileName заканчивается Path.DirectorySeparatorChar чтобы он однозначно указывал на папку. (Спасибо @binki.)

Это решение не будет работать для открытия папки и выбора элемента, так как для этого нет глагола.

Ответ 3

Если вы хотите выбрать файл или папку, вы можете использовать следующее:

Process.Start("explorer.exe", "/select, c:\\teste");

Ответ 4

Вы используете символ @, который устраняет необходимость экранирования обратных косых черт.

Удалите @или замените\\на\

Ответ 5

Вам не нужна двойная обратная косая черта при использовании неэкранированных строк:

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

Ответ 6

Вы должны использовать одну из перегрузок System.Diagnostics.Process.Start(). Это довольно просто!

Если вы не укажете имя процесса, который вы хотите запустить (explorer.exe), система распознает его как допустимый путь к папке и попытается подключить его к уже запущенному процессу проводника. В этом случае, если папка уже открыта, Explorer ничего не сделает.

Если вы поместите имя файла процесса (как и вы), система попытается запустить новый экземпляр процесса, передав вторую строку в качестве параметра. Если строка является допустимой папкой, она открывается во вновь создаваемом процессе, если нет, новый процесс ничего не сделает.

Я не знаю, как в любом случае обрабатываются неверные пути к папкам. Использовать System.IO.Directory.Exists() должно быть достаточно, чтобы убедиться, что.

Ответ 7

Используйте перегруженную версию метода, который принимает экземпляр ProcessStartInfo и устанавливает для свойства ProcessWindowStyle значение, которое работает для вас.

Ответ 8

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); 

Этот код отлично работает в среде VS2010 и правильно открывает локальную папку, но если вы размещаете одно и то же приложение в IIS и пытаетесь открыть его, то он обязательно сработает.

Ответ 9

У меня была эта проблема, и я узнал, почему. моя причина не указана здесь, поэтому кто-то еще, кто получает эту проблему, и ни один из них не исправляет ее.

Если вы запустите Visual Studio в качестве другого пользователя и попытаетесь использовать Process.Start, он будет запущен в контексте пользователей, и вы не увидите его на экране.

Ответ 10

Вы избегаете обратную косую черту, когда знак at делает это для вас.

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

Ответ 11

Странно.

Если он не может найти explorer.exe, вы должны получить исключение. Если он не может найти папку, он все равно должен открыть некоторую папку (например, мои документы)

Вы говорите, что в диспетчере задач появляется другая копия Explorer, но вы ее не видите.

Возможно ли, что он открывается за кадром (например, другой монитор)?

Или вы случайно делаете это в неинтерактивном сервисе?

Ответ 12

Правильно ли он открывается, когда вы запускаете "explorer.exe c:\teste" из меню "Пуск"? Как долго вы это пробовали? Я вижу подобное поведение, когда на моей машине много процессов и когда я открываю новый процесс (например, говорит IE).. он запускается в диспетчере задач, но не отображается в интерфейсе. Вы пробовали перезапуск?

Следующий код должен открыть новый экземпляр проводника

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}

Ответ 13

У вас много приложений, запущенных при попытке этого? Иногда я сталкиваюсь с странным поведением, потому что в моей системе заканчиваются дескрипторы GDI, так как у меня так много открытых окон (наши приложения используют много).

Когда это происходит, окна и контекстные меню не появляются, пока я не закрываю что-то, чтобы освободить некоторые дескрипторы GDI.

Предел по умолчанию в XP и Vista равен 10000. Это не редкость для моего DevStudio иметь 1500 GDI-ручек, поэтому, если у вас есть несколько копий Dev-студии, они могут съесть их довольно быстро. Вы можете добавить столбец в TaskManager, чтобы узнать, сколько ручек используется каждым процессом.

Существует реестр, который вы можете сделать, чтобы увеличить лимит.

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

Ответ 14

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

Просто измените путь или объявите его в string