web-dev-qa-db-ja.com

プロセス開始時のSystem.ComponentModel.Win32Exception-ファイルが見つかりませんが、ファイルは存在します

自動起動用のマネージャーを作成しようとしています。 XMLファイルを読み取ってから、カスタム遅延でプログラムを起動する必要があります。例えば:

<startup id="0">
    <name>Realtek Audio Manager</name>
    <process arguments="-s">C:\Program Files\Realtek\Audio\HDA\RtkNGUI64.exe</process>
    <delay>5</delay>
</startup>

これにより、指定されたプロセスが実行されます(C:\Program Files\...\RtkNGUI64.exe -s)5秒後。

これで、3つのプログラムが起動せず、System.ComponentModel.Win32Exception: "Das System kann die angegebene Datei nichtfinden。" (「システムは指定されたファイルを見つけることができませんでした。」)

しかし、XMLは正しく解析されており、開始したいファイルはXMLファイルで指定した場所にあります。

問題は、次の3つのファイルのみに関係します。
Intel HotkeysCmd-C:\ Windows\System32\hkcmd.exe
Intel GFXトレイ-C:\ Windows\System32\igfxtray.exe
Intel Persistance-C:\ Windows\System32\igfxpers.exe

問題はファイルの場所にあると思います。ファイルはすべてC:\ Windows\System32にあり、他のすべての動作中のプログラムは外部(C:\ Program Files、C:\ Program Files(x86))にあります。 、D:\ Program Files、%AppData%

C:\ Windows\System32でプログラムを起動するには、プログラムに何らかのアクセス権を付与する必要がありますか?どうすればいいですか?

そうでない場合、これらのプログラムでエラーが発生する理由は何でしょうか?

編集-私のコード:

delegate(object o)
{
    var s = (Startup) o;
    var p = new System.Diagnostics.Process
                {
                    StartInfo =
                        new System.Diagnostics.ProcessStartInfo(s.Process, s.Arguments)
                };
    try
    {
        s.Process = @"C:\Windows\System32\igfxtray.exe"; // For debugging purposes
        System.Diagnostics.Process.Start(s.Process);
        icon.ShowBalloonTip(2000, "StartupManager",
                            "\"" + s.Name + "\" has been started.",
                            System.Windows.Forms.ToolTipIcon.Info);
    }
    catch (System.ComponentModel.Win32Exception)
    {
        icon.ShowBalloonTip(2000, "StartupManager",
                            "\"" + s.Name + "\" could not be found.",
                            System.Windows.Forms.ToolTipIcon.Error);
    }
}
8
pascalhein

明らかに、64ビットバージョンのWindowsを使用しています。 c:\ windows\system32およびc:\ program filesディレクトリは、「ファイルシステムリダイレクト」と呼ばれる機能の対象となります。これはappcompat機能であり、32ビットプロセスが64ビット実行可能ファイルを使用しようとしないようにするのに役立ちます。 リダイレクトをc:\ windows\syswow64およびc:\ programファイル(x86)に取得します。

したがって、c:\ program files\realtek\etceteraでファイルを開始しようとすると、32ビットプログラムはc:\ program files(x86)\ realtek\etceteraにリダイレクトされます。存在しないディレクトリ、kaboom。 igfxtray.exeの同じ成分

プログラムのプラットフォームターゲットを変更して、ネイティブ64ビットプロセスとして実行できるようにし、現在発生しているリダイレクトの問題を回避する必要があります。プロジェクト+プロパティの[ビルド]タブで、[プラットフォームターゲット]設定をAnyCPUに変更します。

19
Hans Passant