AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ?Shellexecute? aus Windows Dienst
Thema durchsuchen
Ansicht
Themen-Optionen

?Shellexecute? aus Windows Dienst

Ein Thema von xweghau · begonnen am 5. Jan 2009 · letzter Beitrag vom 6. Jan 2009
 
xweghau

Registriert seit: 29. Dez 2008
Ort: Soest
11 Beiträge
 
Delphi 7 Professional
 
#1

?Shellexecute? aus Windows Dienst

  Alt 5. Jan 2009, 09:50
Hallo!

Ich möchte einen Windows Dienst schreiben, in dem ich überprüfe, ob ein bestimmtes Programm läuft. Wenn das Programm nicht läuft, soll es gestartet werden. Die Überprüfung funktioniert und ich kann das Programm auch mit ShellExecute starten. Leider wird das externe Programm aber als Benutzer "System" ausgeführt mit dem "kleinen" Schönheitsfehler, dass es unsichtbar bleibt, obwohl ich als ShowCmd-Parameter "SW_Show" angegeben habe. Das Programm wird mit dem Benutzer "System" gestartet.

Hat jemand eine Ahnung, was ich da evtl. falsch mache?

Nachfolgend der Delphi 7 Prof. Quellcode:
Delphi-Quellcode:
procedure TsvcArchivprgUeberwachung.Timer1Timer(Sender: TObject);
var hProcess: THandle;
    iRet: Integer;
    sPfad: String;
begin
// Beispiel: sPfad := 'c:\Programme\Archiv\Archiv.EXE';
// Beispiel: sTaskname := 'Archiv.EXE';
// Feststellen, ob die Anwendung läuft
  hProcess := GetProcessHandleFromID(GetProcessID(sTaskname));
  if hProcess = 0 then begin
    iRet := ShellExecute(0, 'open', PChar(sPfad), nil, nil, SW_SHOW);
    if iRet < 33 then begin
{Start eines externen Programmes, das eine Fehlermail erzeugt (das hat aus dem Dienst heraus nicht geklappt, daran muss ich noch mal dran arbeiten, aber so läuft es)}
      iRet := ShellExecute(0, 'open', PChar(ExtractFilePath(ParamStr(0)) + '\MailFromArchive.exe'), PChar('Hinweis:'), PChar(''), SW_HIDE );
{Ich überprüfe nicht, ob mein Versuch eine Mail zu erzeugen erfolgreich war (was habe ich davon, es teilt mir ja keiner mit :-))
Falls notwendig: Verlängerung des Prüfintervalls auf eine Stunde, damit nicht zu viele Mails erzeugt werden.}

      If iInterval < 3600000 then Timer1.Interval := 3600000;
    end;
    end
  else
    Timer1.Interval := iInterval;
end;
Danke schon mal fürs Lesen. Ich hoffe, es fehlen keine Infos.

Gruß
Franz
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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