Процесс.Start () не запускает.EXE-файл (работает при запуске вручную)
у меня есть .exe
файл, который необходимо запустить после создания файла. Файл успешно создан, и я использую следующий код для запуска .exe
файл:
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = pathToMyExe;
processInfo.ErrorDialog = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
Process proc = Process.Start(processInfo);
Я также попытался с простым Process.Start(pathToMyExe);
но .exe
файл не запускается. Когда я пытаюсь pathToMyExe
вручную на моем Проводник Windows программа работать правильно. Но не через программу. Я вижу, как курсор поворачивается к ожиданию в течение нескольких секунд, а затем возвращается к норме. Так исключений тоже нет. Что блокирует файл?
3 ответов
вы не задаете путь к рабочему каталогу, и, в отличие от запуска приложения через проводник, он не устанавливается автоматически в местоположение исполняемого файла.
просто сделать что-то вроде этого:
processInfo.WorkingDirectory = Path.GetDirectoryName(pathToMyExe);
(предполагая входные файлы, dll и т. д. в этом каталоге)
private void Print(string pdfFileName)
{
string processFilename = Microsoft.Win32.Registry.LocalMachine
.OpenSubKey("Software")
.OpenSubKey("Microsoft")
.OpenSubKey("Windows")
.OpenSubKey("CurrentVersion")
.OpenSubKey("App Paths")
.OpenSubKey("AcroRd32.exe")
.GetValue(string.Empty).ToString();
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.FileName = processFilename;
info.Arguments = string.Format("/p /h {0}", pdfFileName);
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
////(It won't be hidden anyway... thanks Adobe!)
info.UseShellExecute = false;
Process p = Process.Start(info);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
int counter = 0;
while (!p.HasExited)
{
System.Threading.Thread.Sleep(1000);
counter += 1;
if (counter == 5)
{
break;
}
}
if (!p.HasExited)
{
p.CloseMainWindow();
p.Kill();
}
}
из-за различных рабочих каталогов, вы должны установить ваш рабочий каталог правильно путь, который вы хотите, чтобы ваш процесс, чтобы начать.
пример демонстрации этого может быть:
Process process = new Process()
{
StartInfo = new ProcessStartInfo(path, "{Arguments If Needed}")
{
WindowStyle = ProcessWindowStyle.Normal,
WorkingDirectory = Path.GetDirectoryName(path)
}
};
process.Start();