2013-02-13 96 views
1

启动MSCONFIG.EXE我与代码的形式:在64位Windows

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

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

我怎么可以重写代码,以便它开始MSCONFIG.EXE一个64位计算机上?我不想改变构建它的CPU类型。我的想法是,我可以在32位或64位Windows 7机器上运行此程序,它的工作原理是一样的。

+1

使用“sysnative”而不是system32。 – 2013-02-14 01:13:03

+0

伟大的建议,汉斯!我从来没有使用过,但我用它就像你说的,它完美的工作!简单而快速,谢谢! – 2013-02-14 03:13:15

+0

@TonyCampbell你可以添加你的答案吗? – newbieguy 2016-02-27 04:44:54

回答

1

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

祝你好运!

+0

谢谢,Twiltie。我曾考虑过更改构建类型,但是当我这样做时,它打破了我在项目的其他部分使用的注册表重定向器。所以,我认为解决这个问题可能比调整代码的其他部分更容易。 – 2013-02-13 04:04:59

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"); 
    } 
} 

设置它的建造平台64。

现在你可以在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文件夹没有被重定向。

+0

原谅我的无知,马特,我还在学习,哈哈!因此,从你所说的话,可以设计另一个应用程序来启动msconfig,为x64 CPU编译/构建它,然后告诉我的当前应用程序直接启动它而不是直接启动msconfig?那么是否有可能将两个程序整合为一个,也许使用MSI安装程序或类似的东西? – 2013-02-13 23:23:08

+0

托尼,我编辑了我的答案,进一步详细一点,希望它有帮助! – Matt 2013-02-14 00:58:31

+0

太棒了,马特!我会看看我能做些什么,感谢您的意见和细节! – 2013-02-14 03:08:53