2013-02-13 129 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