まず第一に - 実際、設計上、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 つの良い結果は、ユーザーがアプリを使用するたびにこの特定のロジックを実行しない可能性があることです。したがって、必要のないときにプロンプトに悩まされることはありません。