3

昇格された特権を持つ Windows 8 で自動的に実行する必要があるアプリケーションがあります。requestedExecutionLevel の requireAdministrator 属性を含むマニフェストを埋め込みました。これはマウス クリックで実行すると正常に動作しますが、アプリケーションを自動的に実行する必要があります。

これは、Vista と Windows 7 では正常に動作しますが、Windows 8 では動作しません。単に実行されないだけです。実行してユーザーに許可を求めるにはどうすればよいですか?

乾杯

4

2 に答える 2

4

これをテストできる Windows 8 のインストールはありませんが、Click Once 展開 (マニフェストの使用が許可されていない場所) で管理者権限を要求すると、同様の問題が発生しました。

アプリケーションが管理者として実行されているかどうかを起動時にチェックすることで解決しました。管理者として実行されていない場合は、管理者として再起動します。

これが私が使用するコード(わずかに変更された)です:

public static bool IsRunningAsAdministrator()
{
    var wi = WindowsIdentity.GetCurrent();
    var wp = new WindowsPrincipal(wi);

    return wp.IsInRole(WindowsBuiltInRole.Administrator);
}

public static void StartAsAdmin(StartupEventArgs e)
{
    if (IsRunningAsAdministrator())
        return;

    // It is not possible to launch a ClickOnce app as administrator directly, so instead we launch the app as administrator in a new process.
    var processInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);

    // The following properties run the new process as administrator
    processInfo.UseShellExecute = true;
    processInfo.Verb = "runas";

    // Start the new process
    Process.Start(processInfo);

    // Shut down the current process
    Application.Current.Shutdown();
}

多くのマシンでテストした後の更新:このソリューションで遭遇した問題の 1 つは、ウイルス対策ソフトウェアがこれを疑わしい動作と見なし、起動をブロックすることが多いことです。

最終的に、インストーラー + 自動更新を Click Once からWiX Toolset + NAppUpdateに変更し、代わりに実行しrequestedExecutionLevel="requireAdministrator"ました。

于 2012-10-03T08:04:20.773 に答える
3

アプリケーションを自動的に実行する必要があります。

「自動的に実行する」とはどういう意味かわかりませんが、ユーザーがログインしたとき、特定の時間、またはその他のトリガー条件が満たされたときに、アプリケーションを実行する必要があると思います。タスクスケジューラを使用して、これを実現できます。ユーザーが管理者権限を持っている場合は、タスクスケジューラが「最高の」権限でアプリケーションを実行するように要求できます。これを行うには、タスクのプロパティで[最高の権限で実行]をオンにする必要があります。

タスクのプロパティ

タスクスケジューラが管理者権限で実行されている場合でも、タスクスケジューラがそのタスクを実行すると、UACプロンプトはユーザーに表示されないことに注意してください。

于 2012-10-03T08:16:00.467 に答える