|
■No81335 (魔界の仮面弁士) に追記 > proc.StartInfo.FileName = "runas.exe" > proc.StartInfo.Arguments = "/trustlevel:0x20000 " & アプリA
実験してみました。 アプリを 2 つ用意するかわりに、自分自身を呼び出しています。
「管理者として実行」した場合、 最初のメッセージは IsAdmin=True ですが、 呼びなおされた後は IsAdmin=False になります。 (基本ユーザーで実行した場合は、二回とも IsAdmin=False です)
Imports System.Security.Principal
Module Module1
Sub Main() Dim ident As WindowsIdentity = WindowsIdentity.GetCurrent() Dim princ As New WindowsPrincipal(ident)
'このアプリが管理者実行されているか確認 Dim sb As New System.Text.StringBuilder() sb.AppendLine(String.Format("Name={0}", princ.Identity.Name)) sb.AppendLine(String.Format("IsAdmin={0}", princ.IsInRole(WindowsBuiltInRole.Administrator))) sb.AppendLine(String.Format("IsUser={0}", princ.IsInRole(WindowsBuiltInRole.User))) MsgBox(sb.ToString())
If My.Application.CommandLineArgs.Any() Then 'このアプリが引数無しで呼ばれていればここで終了 Return End If
'"dummy" という引数を付きて、自分自身を「基本ユーザー」で呼びなおす Dim proc As New Process() proc.StartInfo.FileName = "runas.exe" proc.StartInfo.Arguments = String.Format("/trustlevel:0x20000 ""\""{0}\"" \""dummy\""""", System.Reflection.Assembly.GetExecutingAssembly().Location) proc.Start() End Sub
End Module
|