System.ComponentModel.Win32Exception起动过程时 - 未找到文件,

2019-07-17 11:37发布

我想创建为我自动启动管理器。 它应显示为一个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>

这将运行指定的进程( C:\Program Files\...\RtkNGUI64.exe -s 5秒后)。

现在,三个项目将无法启动,给我的System.ComponentModel.Win32Exception :“DAS系统卡恩死angegebene Datei nicht芬登。” (“系统无法找到指定的文件。”)

但XML被正确解析,我要开始的文件是在我的XML文件中指定的位置。

该问题仅涉及这三个文件:
英特尔HotkeysCmd - C:\ WINDOWS \ SYSTEM32 \ hkcmd.exe
英特尔GFX托盘 - C:\ WINDOWS \ SYSTEM32 \ igfxtray.exe
英特尔持久性 - C:\ WINDOWS \ SYSTEM32 \ igfxpers.exe

我认为这个问题来自文件的位置:它们都位于C:\ Windows \ System32下,和所有其他,工作程序位于外(C:\ Program Files文件,C:\ Program Files文件(86) ,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);
    }
}

Answer 1:

显然,您使用的是Windows的64位版本。 在C:\ Windows \ System32下和C:\ Program Files文件目录都受到了所谓的“文件系统重定向”功能。 这是一个程序兼容性功能,它有助于确保32位进程不要试图使用64位可执行文件。 他们会被重定向到C:\ WINDOWS \ SysWow64资料和C:\ Program Files文件(x86)的。

所以,当您尝试启动在C文件:\ Program Files文件\瑞昱\诸如此类,你的32位程序将被重定向到C:\ Program Files文件(x86)的\ realtek的\等等。 一个不存在的目录,KABOOM。 对于igfxtray.exe相同成分

你需要改变你的程序的目标平台,因此它可以作为一个原生的64位进程中运行,避免了重定向问题,你现在有。 项目+属性,构建选项卡,将“目标平台”设置为AnyCPU。



文章来源: System.ComponentModel.Win32Exception when starting process - file not found, but file exists