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 dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.