C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■94767 / )  Re[3]: スタートアップ登録しても起動しない
□投稿者/ 魔界の仮面弁士 (2718回)-(2020/05/13(Wed) 20:31:42)
No94766 (luka さん) に返信
> スタートアップで管理者実行させるようにしないといけない、新たな課題にぶつかりましたが..
> 可能なのでしょうか.. 幾度もすいません。

スタートアップした途端、UAC の昇格ダイアログが出ることになりますが、
それで構わなければ、「自身を runas 指定で起動しなおす」という手があります。


using System;
using System.Diagnostics;
using System.Reflection;
using System.Security.Principal;

[STAThread]
public static void Main(string[] args)
{
  var wi = WindowsIdentity.GetCurrent();
  var wp = new WindowsPrincipal(wi);
  bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);
  if (!runAsAdmin)
  {
    if (args.Length == 1 && args[0] == "luka@wankuma94764")
    {
      // runas で呼ばれたようだが、管理者権限が無かったので諦める
      // (必要なら、エラーログやメッセージを出力する処理をここに記述)
      return;
    }

    // 新しいプロセスで、自身を管理者として起動しなおす
    var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);
    // 下記のプロパティにより、新しいプロセスが管理者として実行されます。
    processInfo.UseShellExecute = true;
    processInfo.Verb = "runas";
    processInfo.Arguments = "luka@wankuma94764"; // runas で呼んだことを示すための証

    // 新規プロセスを起動
    try
    {
      Process.Start(processInfo);
    }
    catch (Exception)
    {
      // ユーザーがアプリケーションを管理者として実行することを許可しなかった場合、
      // 起動できずに例外になる
      // (必要なら、エラーログやメッセージを出力する処理をここに記述)
    }
    return;
  }

  // 管理者として実行される場所
  /*
  ** Application.EnableVisualStyles();
  ** Application.SetCompatibleTextRenderingDefault(false);
  ** Application.Run(new MainForm());
  */
}
返信 編集キー/


管理者用

- Child Tree -