簡體   English   中英

啟動過程時出現System.ComponentModel.Win32Exception-找不到文件,但是文件存在

[英]System.ComponentModel.Win32Exception when starting process - file not found, but file exists

我正在嘗試為我的自動啟動創建一個經理。 它應該讀取一個XML文件,然后以自定義的延遲啟動我的程序。 例如:

<startup id="0">
    <name>Realtek Audio Manager</name>
    <process arguments="-s">C:\Program Files\Realtek\Audio\HDA\RtkNGUI64.exe</process>
    <delay>5</delay>
</startup>

5秒鍾后,這將運行指定的進程( C:\\Program Files\\...\\RtkNGUI64.exe -s )。

現在,其中三個程序將無法啟動,給我一個System.ComponentModel.Win32Exception :“ Das System kann die angegebene Datei nicht finden”。 (“系統無法找到指定的文件。”)

但是XML解析正確,並且我要啟動的文件位於XML文件中指定的位置。

該問題僅涉及以下三個文件:
英特爾HotkeysCmd-C:\\ Windows \\ System32 \\ hkcmd.exe
英特爾GFX托盤-C:\\ Windows \\ System32 \\ igfxtray.exe
Intel Persistance-C:\\ Windows \\ System32 \\ igfxpers.exe

我認為問題出在文件的位置:它們都位於C:\\ Windows \\ System32中,所有其他正常運行的程序都位於外部(C:\\ Program Files,C:\\ Program Files(x86) ,D:\\ Program Files, %AppData%

我是否必須授予程序某種訪問權限才能在C:\\ Windows \\ System32中啟動程序? 我該怎么做?

如果沒有,我可能會因為這些程序而出錯?

編輯-我的代碼:

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:\Windows\System32\igfxtray.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);
    }
}

顯然,您使用的是Windows的64位版本。 c:\\ windows \\ system32和c:\\ program文件目錄具有稱為“文件系統重定向”的功能。 這是一個appcompatpat功能,它有助於確保32位進程不要嘗試使用64位可執行文件。 它們將被重定向到c:\\ windows \\ syswow64和c:\\ program文件(x86)。

因此,當您嘗試在c:\\ program files \\ realtek \\ etcetera中啟動文件時,您的32位程序將被重定向到c:\\ program files(x86)\\ realtek \\ etcetera。 一個不存在的目錄,kaboom。 igfxtray.exe的相同成分

您需要更改程序的平台目標,以便它可以作為本機64位進程運行,並避免了現在遇到的重定向問題。 在“項目+屬性”的“構建”選項卡上,將“平台目標”設置更改為AnyCPU。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM