System.ComponentModel.Win32Exception при запуске процесса – файл не найден, но файл существует

Вопрос:Я пытаюсь создать менеджера для своих автозапуска. Он должен прочитать XML файл, а затем запустить мои программы с пользовательской задержкой. Например: Realtek Audio Manager C:Program FilesRealtekAudioHDARtkNGUI64.exe 5 Выполняется указанный процесс (C:Program Files...RtkNGUI64.exe -s) через 5 секунд. Теперь три программы не запустится, давая мне System.ComponentModel.Win32Exception: "Das System kann die angegebene Datei nicht

Вопрос:

Я пытаюсь создать менеджера для своих автозапуска. Он должен прочитать XML файл, а затем запустить мои программы с пользовательской задержкой. Например:

<startup id=»0″> <name>Realtek Audio Manager</name> <process arguments=»-s»>C:Program FilesRealtekAudioHDARtkNGUI64.exe</process> <delay>5</delay> </startup>

Выполняется указанный процесс (C:Program Files…RtkNGUI64.exe -s) через 5 секунд.

Теперь три программы не запустится, давая мне System.ComponentModel.Win32Exception: “Das System kann die angegebene Datei nicht finden”. ( “Системе не удалось найти указанный файл.” )

Но XML правильно разбирается, и файл, который я хочу запустить, находится в местоположении, указанном в XML файле.

Проблема касается только этих трех файлов:
Intel HotkeysCmd – C:WindowsSystem32hkcmd.exe
Intel GFX Tray – C:WindowsSystem32igfxtray.exe
Intel Persistance – C:WindowsSystem32igfxpers.exe

Я думаю, что проблема связана с расположением файлов: все они расположены в C:WindowsSystem32, а все остальные рабочие программы находятся снаружи (C:Program Files, C:Program Files (x86), D:Program Files, %AppData%)

Должен ли я предоставить моей программе какие-то права доступа для запуска программ в C:WindowsSystem32? Как мне это сделать?

Если нет, то почему я получаю ошибки с этими программами?

EDIT – мой код:

delegate(object o) { var s = (Startup) o; var p = new System.Diagnostics.Process { StartInfo = new System.Diagnostics.ProcessStartInfo(s.Process, s.Arguments) }; try { s.Process = @»C:WindowsSystem32igfxtray.exe»; // For debugging purposes System.Diagnostics.Process.Start(s.Process); icon.ShowBalloonTip(2000, «StartupManager», «»» + s.Name + «» has been started.», System.Windows.Forms.ToolTipIcon.Info); } catch (System.ComponentModel.Win32Exception) { icon.ShowBalloonTip(2000, «StartupManager», «»» + s.Name + «» could not be found.», System.Windows.Forms.ToolTipIcon.Error); } } Лучший ответ:

Очевидно, что вы используете 64-разрядную версию Windows. В каталогах c:windowssystem32 и c:программных файлов предоставляется функция, называемая “перенаправление файловой системы”. Это функция appcompat, она помогает гарантировать, что 32-разрядные процессы не будут пытаться использовать 64-разрядные исполняемые файлы. Они будут перенаправлены на c:windowssyswow64 и c:program files (x86).

Итак, когда вы пытаетесь запустить файл в c:program filesrealteketcetera, ваша 32-разрядная программа будет перенаправлена ​​на c:program files (x86)realteketcetera. Каталог, который не существует, kaboom. Тот же ингредиент для igfxtray.exe

Вам нужно будет изменить целевую платформу вашей платформы, чтобы она могла запускаться как собственный 64-разрядный процесс и избежать проблемы с перенаправлением, которую вы сейчас имеете. Project + Properties, Build, измените настройку “Цель платформы” на AnyCPU.

Оцените статью
Добавить комментарий