これは古いことは知っていますが、私は答えを探して偶然見つけました。私の場合、私はパブリッシュ機能を使用しており、引き続き使用する必要があります。管理機能へのアクセスも必要です。したがって、そのため、上記の答えはどれもうまくいきませんでした。
アプリケーションの最初に、管理者として実行されているかどうかを確認するメソッドを追加し、実行されていない場合は、管理者として再起動しました。これを行うには、次の参照を追加する必要があります。
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.
}
お役に立てれば!
requireAdministrator
アクセス許可を要求するマニフェストを追加すると、ClickOnceはをサポートしていないと不平を言い始めましたrequireAdministrator
。問題は非常に明確でなければなりません。ClickOnceは、マニフェスト(アプリケーションの一部になる)で昇格の必要性を認識しています。ここに何が必要かわからない…