首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启动进程时的System.ComponentModel.Win32Exception -未找到文件,但文件存在

启动进程时的System.ComponentModel.Win32Exception -未找到文件,但文件存在
EN

Stack Overflow用户
提问于 2012-12-20 22:45:54
回答 1查看 54K关注 0票数 8

我正在尝试为我的自动启动创建一个管理器。它应该读取一个XML文件,然后以自定义延迟启动我的程序。例如:

代码语言:javascript
复制
<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

英特尔持久性- C:\Windows\System32\igfxpers.exe

我认为问题出在文件的位置:它们都位于C:\Windows\System32中,而其他所有工作程序都位于外部(C:\Program Files、C:\Program Files (x86)、D:\Program Files、%AppData%)

要启动C:\Windows\System32中的程序,是否必须为我的程序提供某种访问权限?我该怎么做呢?

如果不是,这些程序出现错误的原因可能是什么?

编辑-我的代码:

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 00:45:08

显然,您使用的是64位版本的Windows。c:\windows\system32和c:\program文件目录受称为“文件系统重定向”的功能的影响。这是一个appcompat特性,它有助于确保32位进程不会尝试使用64位可执行文件。它们将被重定向到c:\windows\syswow64和c:\program files (x86)。

因此,当您尝试启动c:\program files\realtek\etcetera中的文件时,32位程序将被重定向到c:\program files (x86)\realtek\etcetera。一个不存在的目录,kaboom。igfxtray.exe的相同成分

您需要更改程序的平台目标,以便它可以作为本机64位进程运行,并避免您现在遇到的重定向问题。项目+属性,构建选项卡,将“平台目标”设置更改为AnyCPU。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13974653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档