14

[これが直接プログラミングの問題ではないことをお詫び申し上げます。しかし、最近、UACを有効にしたままの新しいVistaマシンに切り替えました(無効にするように言わないでください。オプションではありません)。]

gnuのpatch.exeを実行するたびに、Vistaから昇格ダイアログが表示されます。patch.exeの名前をfoo.exeに変更しても、これは実行されないため、これはVistaの「ヒューリスティック」の1つであると思います。

誰かがこれを無効にする方法を知っていますか?それは私を狂わせており、グーグルは助けていない。

または、patch.exe専用のマニフェストを追加して、これを昇格させないようにシステムに指示する必要がありますか?それは機能しますか?もしそうなら、どのようにそのようなマニフェストを作成しますか?

どうもありがとう、これまで1時間壁に頭をぶつけてきました。

4

3 に答える 3

5

から:
http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/bf4f7dfa-5553-41d3-9c8e-311ee4a88599/

影響を受ける実行可能ファイルにマニフェストを追加して、「asInvoker」の requestedExecutionLevel を宣言できる場合は、プロンプトが表示されなくなります。

UAC アーキテクチャと既存のアプリケーションを正しく動作させるための変換に関する関連ガイド (ページの下部 5 分の 1 付近):

http://technet.microsoft.com/en-us/library/cc709628.aspx

最後に、そのようなマニフェストの書き方:

http://www.google.com/search?q=writing+a+uac+manifest

-アダム

于 2009-02-10T20:14:37.720 に答える
3

私の場合、次のようなラッパー プログラムを作成する必要がありました。

1-「patch.exe」ファイルを別の名前「apply.exe」でシステムの一時フォルダー (%TMP%) にコピーします。

2-必要な引数を指定して「%TMP%\apply.exe」を実行します。

3-「%TMP%\apply.exe」ファイルを削除

マニフェストを記述する必要はありません。

「patch.exe」のフル パスを計算する必要がある場合、.exe が %PATH% 環境変数にあると仮定すると、C# で次のコードを使用できます。

public string GetPatchInstallPath()
{
    StringDictionary env = 
    System.Diagnostics.Process.GetCurrentProcess().StartInfo.EnvironmentVariables;
    string pathEnvVble = env["PATH"];
    string[] paths = new string[]{};
    paths = pathEnvVble.Split(new char[] { ';' });

    foreach (string p in paths)
    {
       string fullPath = Path.Combine(p, "patch.exe");
       if (File.Exists(fullPath))
           return fullPath;
    }
    return string.Empty;
}

それ以外の場合、patch.exe の場所の %PATH% 変数に新しいエントリを追加したくない場合は、patch.exe のフル パスをラッパー プログラムに渡すことができます。

于 2013-07-17T07:29:46.107 に答える