Запуск .exe из той же папки моей программы на C # - PullRequest
3 голосов
/ 08 июля 2010

Я сделал небольшую программу на c # с кнопкой, которая должна открыть другой файл .exe.

Работает нормально, если я использую:

private void start_Click(object sender, RoutedEventArgs e)
        {
            System.Diagnostics.Process.Start(@"path to file");
        }

Но нет, если я хочу, чтобы он запускал .exe из той же папки, я хотел что-то вроде:

private void start_Click(object sender, RoutedEventArgs e)
        {
            System.Diagnostics.Process.Start(@"program.exe");
        }

Чего мне не хватает, я попробовал решение с этого сайта:

var startIngo = new ProcessStartInfo();
startIngo.WorkingDirectory = // working directory
// set additional properties 

Process proc = Process.Start(startIngo);

Но Visual C # вообще не распознает ProcessStartInfo ...

Ответы [ 5 ]

11 голосов
/ 08 июля 2010

То, что вы ищете:

Application.StartupPath

Он вернет путь запуска, с которого был запущен ваш исполняемый файл.

Если вы используете WPF, попробуйте вместо этого:

String appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
2 голосов
/ 08 июля 2010

Вы можете сделать:

var startupPath = System.IO.Path.GetDirectoryName(
                       System.Reflection.Assembly.GetEntryAssembly().Location);
var programPath = System.IO.Path.Combine(startupPath, "program.exe");

System.Diagnostics.Process.Start(programPath);
0 голосов
/ 09 июля 2010

Существует два случая:

  1. Приложение было запущено напрямую - путь запуска можно извлечь из командной строки.

  2. Приложение было запущено косвенно - например, из модульного теста путь запуска не может быть извлечен из командной строки, однако вы можете прочитать его из текущего каталога в статическую переменную во время запуска (до того, как пользователь получитвозможность изменить его (например, используя диалог открытия / сохранения файла)).

0 голосов
/ 08 июля 2010

Вы также можете попробовать System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

, чтобы получить свой локальный путь.Например

//in your imports/using section
using System.IO
using System.Reflection
using System.Diagnostics;

//in your code to execute
Process.start(Path.GetDirectoryName(Aseembly.GetExecutingAssembly().GetName().CodeBase) + "\\program.exe")
0 голосов
/ 08 июля 2010

ProcessStartInfo находится в пространстве имен System.Diagnostics - вам необходимо импортировать это пространство имен вверху файла cs, используя оператор using System.Diagnostics;, чтобы компилятор распознал ProcessStartInfo без явного указания пространства имен, где вы используете класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...