23. maj 2002 - 17:56Der er
7 kommentarer og 1 løsning
starte applikation fra service
Hvordan starter jeg en applikation (feks notepad) fra en service (med CreateProcess) ?
Jeg har forsøgt, men det går ikke lige som det skal.
De applikationer jeg starter optræder kun som processor i task manageren og kommer aldrig "helt frem". Desuden kan jeg ikke afslutte disse processor !?
Jeg har forsøgt med følgende kode:
begin FillChar(StartupInfo, SizeOf(TStartupInfo), 0); with StartupInfo do begin cb := SizeOf(TStartupInfo); dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; wShowWindow := sw_show; end;
if (CreateProcess(nil,PChar(self.path),nil,nil,false,DETACHED_PROCESS,nil,nil,StartupInfo,ProcessInfo)) and (self.waitForProcess) then begin repeat while PeekMessage(Msg, 0, 0, 0, pm_Remove) do begin if Msg.Message = wm_Quit then Halt(Msg.WParam); TranslateMessage(Msg); DispatchMessage(Msg); end; GetExitCodeProcess(ProcessInfo.hProcess ,lpExitCode); until lpExitCode<>Still_Active;
with ProcessInfo do begin CloseHandle(hThread); CloseHandle(hProcess); end; end; end;
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Function WinExecAndWait32(FileName:String;Visibility:integer):Integer; var zAppName:array[0..512] of char; zCurDir:array[0..255] of char; WorkDir:String; StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; begin StrPCopy(zAppName,FileName); GetDir(0,WorkDir); StrPCopy(zCurDir,WorkDir); FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=Visibility; if not CreateProcess(nil, zAppName, { pointer to command line string } nil, { pointer to process security attributes } nil, { pointer to thread security attributes } false, { handle inheritance flag } CREATE_NEW_CONSOLE or { creation flags } NORMAL_PRIORITY_CLASS, nil, { pointer to new environment block } nil, { pointer to current directory name } StartupInfo, { pointer to STARTUPINFO } ProcessInfo) then Result:=-1 { pointer to PROCESS_INF } else begin WaitforSingleObject(ProcessInfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end;
FileName = Navnet på programmet som skal startes (eks. "sti"\notepad.exe) Visibility = Hvordan skal programmet vises (eks. SW_SHOWNORMAL)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.