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

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

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

Re[2]: 管理者権限起動APより別APを管理者権限なしで起動


(過去ログ 138 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■81334 / inTopicNo.1)  管理者権限起動APより別APを管理者権限なしで起動
  
□投稿者/ マルタ (1回)-(2016/09/08(Thu) 16:29:53)

分類:[VB.NET/VB2005 以降] 

VB2013で作成したアプリAとアプリBがあります。
アプリAがメインアプリで、
アプリBは、アプリAを実行するためのライセンス情報が登録されていない場合に
ライセンス情報を登録するサブアプリです。
また、アプリBは、HKEY_LOCAL_MACHINE配下のレジストリに書き込む処理を行うため、
管理者権限で起動します。

さて、アプリBで情報登録OKとなった場合、
アプリBからProcess.Start()でアプリAを起動したいのですが、
試したところ、アプリAが管理者権限で起動してしまいます。
おそらく、アプリBが管理者権限で起動しているので、
ここから呼び出されるアプリAも管理者権限で起動してしまうのだと思うのですが、
これだと、アプリAではファイルのドラッグ&ドロップが効かなくなり
いささか不便です。
(一度アプリAを終了して、再度アプリAを立ち上げれば大丈夫なのですが。)

管理者権限で起動しているアプリBより、
管理者権限なしでアプリAを起動する方法はあるのでしょうか?
ちなみに、アプリB側では、アプリAの実行ファイル(exe)のパスは
分かります(実はアプリBと同じフォルダ内)。

よろしくお願いします。

引用返信 編集キー/
■81335 / inTopicNo.2)  Re[1]: 管理者権限起動APより別APを管理者権限なしで起動
□投稿者/ 魔界の仮面弁士 (891回)-(2016/09/08(Thu) 16:58:13)
No81334 (マルタ さん) に返信
> さて、アプリBで情報登録OKとなった場合、
> アプリBからProcess.Start()でアプリAを起動したいのですが、
A がメインなのであれば、B が A を非管理者呼ぶのではなく、
A が B を管理者実行する方が良いのかも。


> 管理者権限で起動しているアプリBより、
> 管理者権限なしでアプリAを起動する方法はあるのでしょうか?
試した事は無いですが、
 Dim proc As New Process()
 proc.StartInfo.FileName = "runas.exe"
 proc.StartInfo.Arguments = "/trustlevel:0x20000 " & アプリA
   :
 proc.Start()
だとどうでしょうか?
http://www.k-tanaka.net/cmd/runas.php
引用返信 編集キー/
■81337 / inTopicNo.3)  Re[2]: 管理者権限起動APより別APを管理者権限なしで起動
□投稿者/ 魔界の仮面弁士 (892回)-(2016/09/08(Thu) 17:25:49)
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
引用返信 編集キー/
■81343 / inTopicNo.4)  Re[2]: 管理者権限起動APより別APを管理者権限なしで起動
□投稿者/ マルタ (2回)-(2016/09/09(Fri) 13:33:01)
ありがとうございます。
ちょっと今すぐ試せない状況になってしまったので
改めて試してみます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -