1

コードが記載されたフォームがあります。

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

ボタンをクリックすると、msconfigが起動します。Win32Excpetion問題は、x64マシンで実行すると、ファイルが見つからないという未処理のエラーでクラッシュすることです。私はファイルが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

これを回避する 1 つの方法は、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 フォルダーがリダイレクトされないため、msconfig.exe にアクセスできる 'msconfigstarter.exe' が存在することがわかっている x64 アプリを起動するため、ファイル システム リダイレクターが x86 アプリの System32 フォルダーをスワップするという問題を回避します。

于 2013-02-13T06:49:02.213 に答える