2016-05-24 11 views
-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 

答えて

0

これが表示されます。私が実行したいアプリケーションは、 "lpCommandLine" argとして記述する必要があります。

関連する問題