権限を管理者権限に昇格して外部バッチを起動 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 eigyou  (社会人)
投稿日時
2018/9/1 18:17:33
shu様 回答ありがとうございます
p = System.Diagnostics.Process.Start(psi) のところで、Falseに設定しろとのたまいます
さて、その後わからんなりに、試行錯誤 動いたたと言うべきかどうか
直接バッチファイルを起動しないで、起動用の実行プログラムを作成 このプロパティを管理者で起動に設定 実行プログラムを直接起動すると、UACのダイアログが表示されますが、今回のプログラムから起動すると、UACのダイヤログが表示されない
プログラムから、別途起動用バッチファイルを作って、sart c:\xxxxx.exe で、起動用実行プログラムを起こすと UACのダイヤログが表示されるようになり、はい を押すことで、管理者として最終のバッチファイルを起動できました。
なんとも正しい方法なのかなんともです
p = System.Diagnostics.Process.Start(psi) のところで、Falseに設定しろとのたまいます
さて、その後わからんなりに、試行錯誤 動いたたと言うべきかどうか
直接バッチファイルを起動しないで、起動用の実行プログラムを作成 このプロパティを管理者で起動に設定 実行プログラムを直接起動すると、UACのダイアログが表示されますが、今回のプログラムから起動すると、UACのダイヤログが表示されない
プログラムから、別途起動用バッチファイルを作って、sart c:\xxxxx.exe で、起動用実行プログラムを起こすと UACのダイヤログが表示されるようになり、はい を押すことで、管理者として最終のバッチファイルを起動できました。
なんとも正しい方法なのかなんともです
投稿者 shu  (社会人)
投稿日時
2018/9/1 16:49:04
psi.UseShellExecute = False
を行うと
psi.Verb = "runas"
の設定が無効になると思います。
を行うと
psi.Verb = "runas"
の設定が無効になると思います。
投稿者 eigyou  (社会人)
投稿日時
2018/9/1 15:19:56
毎度お世話になります。
一般ユーザにてネットワークの設定変更を行いたく、管理者ユーザでネットワーク設定
変更のバッチファイルを起動させようとしています。
先ほど、ウィンドウの件で、質問しましたが、それ以前に昇格して起動できませんでした
実際に、ネットワークの設定変更のバッチを起動すると、設定変更できず、権限の昇格が
必要ですとのエラーがでます
UACのダイヤログが表示されてOKしないといけないと思われますが、うまくいきません
これって無理なのかしらん
VB2010です
一般ユーザにてネットワークの設定変更を行いたく、管理者ユーザでネットワーク設定
変更のバッチファイルを起動させようとしています。
先ほど、ウィンドウの件で、質問しましたが、それ以前に昇格して起動できませんでした
実際に、ネットワークの設定変更のバッチを起動すると、設定変更できず、権限の昇格が
必要ですとのエラーがでます
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 String, ByVal strArguments As String, Optional 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
ご指摘の通り、runas 動詞が無効になっていると思われます。
回避方法が、結局わからず、実行ファイルのプロパティに特権レベルの管理者権限で起動に
チェックを入れて、別の管理者ユーザで起動させています(記載したまわりくどい方法)