在64位Windows上启动msconfig.exe

时间:2013-02-13 03:40:18

标签: c# x86 64-bit

我有一个包含代码的表单:

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

我的想法是点击一个按钮,它为我启动msconfig。问题是,当我在x64计算机上运行它时遇到Win32Excpetion崩溃是未处理的错误,说它无法找到该文件。我知道该文件存在于C:\ Windows \ System32 \中,我相信这与我为x86 CPU类型编译的项目有关。

如何重写代码以便在64位计算机上启动msconfig.exe?我不想更改用于构建它的CPU类型。我的想法是,我可以在32位或64位Window 7机器上运行该程序,它的工作原理相同。

2 个答案:

答案 0 :(得分:1)

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

祝你好运!

答案 1 :(得分: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"); 
}

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