-1
私はセットアップ "d:\ myapp_setup_update.exe"を実行したいと思います。サービスから実行するので、CreateProcessAsUsersを使用しようとしています。CreateProcessAsUserはアプリケーションを実行しません
しかし、私は構文が間違っている可能性があります。 このコードを実行する前に、パスが存在し、hTokenが0でないことを確認しました。
これは私の現在のアプローチです。
誰か間違いを見つけますか? 私はAPI宣言についてもよく分かりません。 MSDNはいくつかのサンプルでロングを使用してから、再びストリングを使用します。本当に奇妙です。
ありがとうございました!
Private Declare Function CreateProcessAsUser Lib "advapi32.dll" _
Alias "CreateProcessAsUserA" _
(ByVal hToken As Long, _
ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, _
ByVal lpCurrentDirectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Private Function pDoIt(ByVal hToken As Long) As Boolean
Dim sChildProcName$
sChildProcName = "d:\myapp_setup_update.exe"
Dim tProcessInfo As PROCESS_INFORMATION
Dim tStartupinfo As STARTUPINFO
tStartupinfo.cb = Len(tStartupinfo)
Dim bChildProcStarted As Boolean
bChildProcStarted = CreateProcessAsUser(hToken, sChildProcName, vbNullString, 0&, 0&, 0, 0&, 0, vbNullString, tStartupInfo, tProcessInfo)
'GetLastError always returns 0... strange
pDoIt = bChildProcStarted
End Sub