1

我有一个带有代码的表格:

private void msconfigButton_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start("msconfig.exe"); 
}

这个想法是我单击一个按钮,它会为我启动 msconfig。问题是当我在 x64 机器上运行它时,它Win32Excpetion会因未处理的错误而崩溃,说它找不到文件。我知道该文件存在于 C:\Windows\System32\ 中,并且我相信这与我正在为x86CPU 类型编译的项目有关。

如何重写代码以在 64 位计算机上启动 msconfig.exe?我不想更改 CPU 类型来构建它。我的想法是我可以在 32 位或 64 位 Window 7 机器上运行这个程序,并且它的工作原理是一样的。

4

2 回答 2

1

似乎避免此问题的唯一方法是更改​​构建类型。请参阅 http://social.msdn.microsoft.com/Forums/pl/csharplanguage/thread/ad97bb81-0566-4eb9-b1e1-c591476a4958 如果有什么似乎可以查看文件系统重定向器可以提供一些见解或解决方法!

祝你好运!

于 2013-02-13T04:02:48.503 回答
0

解决此问题的一种方法是编写一个启动 msconfig 的简单 x64 应用程序。

然后,您的应用程序将保持为 x86,并且您的 Process.Start 将启动您的包装应用程序,而后者又将启动 msconfig。

例如,使用以下内容创建一个新的控制台应用程序(我们称之为“msconfigstarter”):

class Program
{
    private static void Main(string[] args)
    {
        System.Diagnostics.Process.Start("c:\\windows\\system32\\msconfig.exe");
    }
}

将其构建平台设置为 x64。

现在,您可以将该 exe ('msconfigstarter.exe') 作为内容文件添加到您的应用程序项目中,该内容文件将复制到您的输出文件夹中,或者将其作为输出文件包含在您的安装程序中。

然后将您的按钮单击代码更改为:

private void msconfigButton_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start("msconfigstarter.exe"); 
}

这解决了文件系统重定向器将 System32 文件夹交换为 x86 应用程序的问题,因为您启动了一个您知道存在“msconfigstarter.exe”的 x64 应用程序,然后它可以访问 msconfig.exe,因为没有为它重定向 system32 文件夹。

于 2013-02-13T06:49:02.213 回答