Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateProcess aus Dienst heraus (https://www.delphipraxis.net/66788-createprocess-aus-dienst-heraus.html)

Angel4585 4. Apr 2006 12:13


CreateProcess aus Dienst heraus
 
Hallo zusammen,

ich hab gerade das Problem, das mein CreateProcess aus meinem Dienst heraus nicht funzt.

Was für Flags muss ich setzen damit das funktioniert?

MfG :angel:

Luckie 4. Apr 2006 12:21

Re: CreateProcess aus Dienst heraus
 
Wenn du uns jetzt noch sagst, was du unter "nicht funzen" verstehst...

Angel4585 4. Apr 2006 12:27

Re: CreateProcess aus Dienst heraus
 
"nicht funtzen" = Cursor für ca. 1 Sek = crHourGlass und dann nichtsmehr => programm wird nicht ausgeführt.

Ich hab keine Ahnung wie ich die ganzen Flags in nem Dienst anders setzen muss als normalerweise.

Also im Moment sieht das so aus:

Delphi-Quellcode:
ZeroMemory( @si, sizeof(si) );
si.lpDesktop:=PChar(deskName);
si.cb := sizeof(si);
ZeroMemory( @pi, sizeof(pi) );
cf:=CREATE_NEW;
command:='E:\Programme\Asbion\Syncronaut\System\Syncronaut4.exe';
CreateProcess(Nil,PChar(command),nil,nil,False,cf,nil,nil,si,pi );

sECuRE 4. Apr 2006 13:10

Re: CreateProcess aus Dienst heraus
 
Hi,

ich benutze erfolgreich diesen Code:
Delphi-Quellcode:
procedure StartApplicationAndWait(const FileName:string);
var sei:TShellExecuteInfoA;
    retval:integer;
begin
  ZeroMemory(@sei, sizeof(sei));
  with sei do begin
    cbSize:=sizeof(sei);
    fMask:=SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_NO_UI;
    Wnd:=0;
    lpVerb:='open';
    lpFile:=PAnsiChar(FileName);
    lpParameters:=nil;
    lpDirectory:=PAnsiChar(ExtractFileDir(FileName));
    nShow:=SW_SHOW; // evtl anpassen...
  end;
  if ShellExecuteExA(@sei) then begin
    // Programm ist erfolgreich gestartet
    try
        retval:=WAIT_TIMEOUT;
       
        while (retval = WAIT_TIMEOUT) do begin
          retval:=WaitForSingleObject(sei.hProcess, 500);
          Application.ProcessMessages;
        end;
    finally
      CloseHandle(sei.hProcess);
    end;
    // Programm wurde beendet
  end else begin
    // Programm konnte nicht gestartet werden; anpassen an eigene Logmechanismen
    SysErrorMessage(GetLastError);
  end;
Bei einem Dienst ist außerdem wichtig, unter welchem Benutzernamen er läuft. Probier mal, das Häkchen bei Anmelden -> Lokales Systemkonto -> "Datenaustausch zwischen Dienst und Desktop zulassen" zu aktivieren oder stell dein aktives Konto ein bei Anmelden -> "Dieses Konto".

cu

Angel4585 4. Apr 2006 13:21

Re: CreateProcess aus Dienst heraus
 
Ähm.. sorry hab vergessen zu erwähnen, da das programm nicht auf dem Standard desktop sondern auf nem eigenen Desktop angezeigt werden soll, da funzt ShellExecute glaub ich leider nicht...

Der Desktop hat den Namen "MyOwnDesktop". Bei CreateProcess kann ich den in STARTUPINFO angeben.

Angel4585 5. Apr 2006 11:01

Re: CreateProcess aus Dienst heraus
 
Also ich hab jetzt folgenden Code:

Delphi-Quellcode:
if not LogonUser(
           PChar('Username'),
           PChar('Workgroup'),
           PChar('password'),
           LOGON32_LOGON_INTERACTIVE,
           LOGON32_PROVIDER_DEFAULT,
           token) then
  Beep;

ZeroMemory( @si, sizeof(si) );
si.lpDesktop:=PChar('MyOwnDesktop');
si.cb := sizeof(si);
ZeroMemory( @pi, sizeof(pi) );
cf:=CREATE_NEW or CREATE_NEW_CONSOLE;
command:='E:\Programme\Programm.exe';

try
  if not CreateProcessAsUser(
    token,
    nil,
    PChar(command),
    nil,
    nil,
    False,
    cf,
    nil,
    PChar(ExtractFilePath(command)),
    si,
    pi )then
      Beep;
except
  Beep;
  end;
Aus einem "normalen" Programm heraus funktioniert das ohne Probleme, aus einem Dienst heraus passiert das was ich oben beschrieben habe. Völlig egal ob ich den Dienst als "LocalSystem" oder einem Benutzer ausführe.

Weis keiner was ich machen kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz