権限を管理者権限に昇格して外部バッチを起動

タグの編集
投稿者 eigyou  (社会人) 投稿日時 2018/9/1 15:19:56
毎度お世話になります。

一般ユーザにてネットワークの設定変更を行いたく、管理者ユーザでネットワーク設定
変更のバッチファイルを起動させようとしています。

先ほど、ウィンドウの件で、質問しましたが、それ以前に昇格して起動できませんでした

実際に、ネットワークの設定変更のバッチを起動すると、設定変更できず、権限の昇格が
必要ですとのエラーがでます

UACのダイヤログが表示されてOKしないといけないと思われますが、うまくいきません
これって無理なのかしらん

VB2010です

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim appPath As String = My.Application.Info.DirectoryPath.ToString()

        Dim blnRet As Boolean = False
        blnRet = RunAs(appPath & "\test.bat""""an_administrator""abcd1234")

    End Sub


    Public Function RunAs(ByVal strExecName As StringByVal strArguments As StringOptional ByVal strUserName As String = ""Optional ByVal strPassword As String = ""As Boolean

        Dim psi As New System.Diagnostics.ProcessStartInfo()
        Dim p As System.Diagnostics.Process

        psi.UseShellExecute = True
        psi.Verb = "runas"
        psi.FileName = strExecName
        psi.Arguments = strArguments

        If strUserName <> "" Then
            psi.UserName = strUserName

            Dim pw As New System.Security.SecureString
            Dim ch As String
            For Each ch In strPassword.ToCharArray()
                pw.AppendChar(ch)
            Next
            psi.Password = pw
            psi.UseShellExecute = False
        End If

        'アクセスが許可されている作業ディレクトリを設定する 
        psi.WorkingDirectory = My.Application.Info.DirectoryPath.ToString()

        If ParentForm IsNot Nothing Then
            'UACダイアログが親プログラムに対して表示されるようにする 
            psi.ErrorDialog = True
            psi.ErrorDialogParentHandle = ParentForm.Handle
        End If

        RunAs = True
        Try
            p = System.Diagnostics.Process.Start(psi)
            p.WaitForExit()

        Catch ex As System.ComponentModel.Win32Exception
            Debug.Print(ex.Message)
            RunAs = False
        End Try

    End Function
投稿者 shu  (社会人) 投稿日時 2018/9/1 16:49:04
psi.UseShellExecute = False
を行うと
psi.Verb = "runas"
の設定が無効になると思います。
投稿者 eigyou  (社会人) 投稿日時 2018/9/1 18:17:33
shu様 回答ありがとうございます

p = System.Diagnostics.Process.Start(psi) のところで、Falseに設定しろとのたまいます

さて、その後わからんなりに、試行錯誤 動いたたと言うべきかどうか

直接バッチファイルを起動しないで、起動用の実行プログラムを作成 このプロパティを管理者で起動に設定 実行プログラムを直接起動すると、UACのダイアログが表示されますが、今回のプログラムから起動すると、UACのダイヤログが表示されない

プログラムから、別途起動用バッチファイルを作って、sart c:\xxxxx.exe で、起動用実行プログラムを起こすと UACのダイヤログが表示されるようになり、はい を押すことで、管理者として最終のバッチファイルを起動できました。

なんとも正しい方法なのかなんともです
投稿者 eigyou  (社会人) 投稿日時 2018/9/10 19:52:55
shu様

ご指摘の通り、runas 動詞が無効になっていると思われます。
回避方法が、結局わからず、実行ファイルのプロパティに特権レベルの管理者権限で起動に
チェックを入れて、別の管理者ユーザで起動させています(記載したまわりくどい方法)