2016-05-24 12 views
-1

Ich möchte mein Setup "d: \ myapp_setup_update.exe" ausführen, und da ich es von einem Dienst ausführen, versuche ich CreateProcessAsUsers zu verwenden.CreateProcessAsUser führt die Anwendung nicht aus

Allerdings könnte ich die Syntax falsch verstanden haben. Vor dem Ausführen dieses Codes habe ich sichergestellt, dass der Pfad existiert und dass hToken nicht 0 ist.

Dies ist mein derzeitiger Ansatz.

Hat jemand einen Fehler gefunden? Ich bin nicht einmal sicher über die API-Deklaration. MSDN verwendet Longs in einigen Beispielen und dann wieder Zeichenfolgen. Wirklich seltsam.

Vielen Dank für die Hilfe!

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 

Antwort

0

Ich habe es. Die Anwendung, die ich ausführen möchte, sollte als "lpCommandLine" arg angegeben werden.