9

自動起動用のマネージャーを作成しようとしています。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 nicht finden.」というメッセージが表示されます。(「システムは指定されたファイルを見つけることができませんでした。」)

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

この問題は、次の 3 つのファイルのみに関係して い
ます 。

問題はファイルの場所にあると思います: それらはすべて 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);
    }
}
4

1 に答える 1

20

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

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

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

于 2012-12-20T16:45:08.267 に答える