Вопрос:
Я пытаюсь создать менеджера для своих автозапуска. Он должен прочитать 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.