2016-05-24 4 views
-1

Я хотел бы запустить мою установку «d: \ myapp_setup_update.exe», и поскольку я запускаю ее из службы, я пытаюсь использовать CreateProcessAsUsers.CreateProcessAsUser не запускает приложение

Однако, я думаю, что, возможно, я получил синтаксис неправильно. Перед запуском этого кода я убедился, что путь существует и что hToken не равен 0.

Это мой текущий подход.

Означает ли кто-либо ошибку? Я даже не уверен в декларации API. MSDN использует longs в некоторых образцах, а затем снова строки. Действительно странно.

Большое спасибо за помощь!

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

Got it. Приложение, которое я хочу запустить, должно быть указано как аргумент «lpCommandLine».

Смежные вопросы