そのため、レジストリへのアクセスを必要とするアプリケーションを作成していました。説明や名前など、他のタッチを追加する前に、ビルド設定を変更せずに機能させたいと思いました。
すぐに、消えないエラーが表示されます。 ClickOnce does not support the request execution level 'requireAdministrator'.
今、このアプリケーションではClickOnceに触れていません。私が行ったことは、これらの許可を要求するマニフェストファイルを含めることだけでした。
今の私の問題は、このエラーが消えないことであり、プログラムをコンパイルできません。何をすべきかアドバイスはありますか? (サイドノート:私は寝ようとしているので、明日の午後にこれを確認します)。
編集:このコメントも良い答えを与えます。
一度クリックすると、「公開」をクリックするたびに有効になります。 「requireAdministrator」を使用している場合、ClickOnceを使用できないため、プロジェクトを「公開」できません。
オリジナル:
[セキュリティ]タブで、[ClickOnceセキュリティ設定を有効にする]がオンになっていることがわかりました。私はそれを確認しなかったにもかかわらず。とにかく、チェックを外すとClickOnceが停止してエラーが発生しました。見つけるのに時間がかかりました...
私はこれを古い質問を知っていますが、2年後にここに来ました。
プロジェクトプロパティの[セキュリティ]タブからClicKOnceを無効にして、問題を解決できます。下記参照:
発行ウィザードまたは「今すぐ発行」を使用する場合、クリック1回チェックボックスが自動的に選択されます...
私はこれが古いことを知っていますが、答えを探してそれを見つけました。私の場合、公開機能を使用していますが、引き続き使用する必要があります。管理機能へのアクセスも必要です。そのため、上記の答えはどれもうまくいきませんでした。
最終的に管理者として実行されているかどうかを確認するメソッドをアプリケーションの最初に追加し、実行されていない場合は管理者として再起動します。これを行うには、次の参照を追加する必要があります。
using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;
次に、これをメインメソッドがアクセスしやすい場所に配置する必要があります。私はWPFを使用しているため、MainWindow.xaml.csに追加しましたが、コードの早い段階で追加できます。必要に応じて、これらのメソッドに「静的」を追加することを忘れないでください。
private void AdminRelauncher()
{
if (!IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
proc.Verb = "runas";
try
{
Process.Start(proc);
Application.Current.Shutdown();
}
catch(Exception ex)
{
Console.WriteLine("This program must be run as an administrator! \n\n" + ex.ToString());
}
}
}
private bool IsRunAsAdmin()
{
try
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception)
{
return false;
}
}
最後に、プログラムの開始時に、メソッドへの参照を追加します。私の場合、MainWindowに追加しましたが、Mainにも追加できます。
public MainWindow()
{
InitializeComponent();
AdminRelauncher(); //This is the only important line here, add it to a place it gets run early on.
}
お役に立てれば!
App.Manifestファイルを見てください。これが表示されます。
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
コメントには指示がありますが、「requireAdministrator」を削除して挿入するだけで問題が解決しました:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
同じ問題があります。「ClickOnceセキュリティ設定を有効にする」をオフにして解決します。VisualStudioでこのオプションを見つけるには、Project ==> properties ==> Select Security ==> Enable ClickOnce security settings(このオプションはすでにチェックされているので、チェックを外すと問題が解決します)。
VB.NETのコードスニペットを次に示します。
If Not New WindowsPrincipal(WindowsIdentity.GetCurrent).IsInRole(WindowsBuiltInRole.Administrator) Then
Process.Start(New ProcessStartInfo With { _
.UseShellExecute = True, _
.WorkingDirectory = Environment.CurrentDirectory, _
.FileName = Assembly.GetEntryAssembly.CodeBase, _
.Verb = "runas"})
編集:しかし、この方法で展開すると、一部のAVソフトウェアがコードをブロックします。