5

アプリケーションは管理者アカウントではなくユーザーセッションから実行されることを知っているので、アプリケーションに管理者権限を与える必要があります。

他のサイトを調べましたが、役立つものが見つかりません。

マニフェストを編集してみたところ、次の行が挿入されました。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

これにより、ClickOnceを使用して公開しようとするとエラーが発生しましたが、デバッグ時にはエラーが発生しませんでした。

手伝って頂けますか?

4

2 に答える 2

5

まず第一に - 実際、設計上、ClickOnce アプリを管理者としてインストールしてインストールすることは許可されていません: http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

この投稿を見てください: http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - ClickOnce アプリを管理者として実行する方法を説明しています。しかし、私はこの道を歩んできたと言わざるを得ませんが、あまり運がありませんでした。このアプローチには多くの問題がありました (ClickOnce アプリを管理者権限で実行しようとしました)。私が思い出す限り、最大の問題は自動更新が正しく機能していなかったことです。管理者以外のユーザーは、常に管理者の資格情報を入力する必要がある場合があることは言うまでもありません。

したがって、私のアドバイスは、ロジックを再考し、管理者として実行する必要がある部分を別のEXEファイルにカプセル化し、ユーザーがそのボタンをクリックするとUACプロンプトが表示されることを非常に明確にすることです(おそらくボタンに「盾」アイコンを追加します)。そして、その button_click イベントで次のようにします:

// 2. Run Photoshop action on this image (and wait for the task to complete)
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false)
{
    var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath,  "\"" + imgPhotoshopActionAbsPath + "\"");
    pi.UseShellExecute = true;
    pi.Verb = "runas";
    var photoshopAction = Process.Start(pi);
    var success = photoshopAction.WaitForExit();
    if (success == false)
    {
        // do something here
    }                
}

このアプローチは私にとって非常にうまくいきました。ここでの鍵は次のとおりです。

pi.UseShellExecute = true;
pi.Verb = "runas";

管理者権限でEXEを実行するため、その時点でUACプロンプトが表示されます。ここでのもう 1 つの良い結果は、ユーザーがアプリを使用するたびにこの特定のロジックを実行しない可能性があることです。したがって、必要のないときにプロンプ​​トに悩まされることはありません。

于 2012-04-19T12:31:59.240 に答える
1

この動作は仕様によるものだと確信しています。

ClickOnce アプリは、管理者権限なしでインストールできるように設計されています。実行時に昇格させることはできません。これは、管理者権限を持たないユーザーが事実上、アプリをインストールしてから管理者として実行できることを意味するためです。これはセキュリティ上のリスクになります。

于 2012-04-19T12:23:38.670 に答える