AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm von Dienst starten lassen (Jetzt aber wirklich mal)

Programm von Dienst starten lassen (Jetzt aber wirklich mal)

Ein Thema von CodeX · begonnen am 25. Feb 2008 · letzter Beitrag vom 5. Aug 2014
Antwort Antwort
Seite 4 von 5   « Erste     234 5   
CodeX

Registriert seit: 30. Okt 2004
300 Beiträge
 
Delphi XE Professional
 
#31

Re: Programm von Dienst starten lassen (Jetzt aber wirklich

  Alt 21. Jun 2008, 22:51
Klar doch.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#32

Re: Programm von Dienst starten lassen (Jetzt aber wirklich

  Alt 21. Jun 2008, 23:01
Laß es ihn doch selber posten
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.699 Beiträge
 
Delphi 7 Professional
 
#33

Re: Programm von Dienst starten lassen (Jetzt aber wirklich

  Alt 21. Jun 2008, 23:04
Wäre mein nächster Vorschlag gewesen.
Hast du Lust einen Artikel über deinen Code zu posten auf : http://blog.delphi-jedi.net/
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
300 Beiträge
 
Delphi XE Professional
 
#34

Re: Programm von Dienst starten lassen (Jetzt aber wirklich

  Alt 22. Jun 2008, 18:59
Ja, kann ich machen. Dann brauch ich einen Login, oder?
Kannst mir die Login-Daten per PN schicken. Ich versuche, den Artikel noch heute zu verfassen, da ich ab morgen eine Woche unterwegs bin und keine Zeit haben werde. Sollte das heute nicht mehr klappen, dann mache ich das in einer Woche.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.699 Beiträge
 
Delphi 7 Professional
 
#35

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 22. Jun 2010, 16:30
statt "is2000"
if TJwWindowsVersion.IsWindows2000(false)then vorher noch
uses ..., JwsclVersion;
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.540 Beiträge
 
Delphi XE3 Professional
 
#36

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 22. Jun 2010, 18:59
if TJwWindowsVersion.IsWindows2000(false)then
So langsam kann man sich soeine Abfrage auch sparen.

Delphi 2010 setzt ja schon mindestens ein WinNT (das hat eh keiner und's nächste der NT-Reihe war schon die 2000) oder gar ein XP voraus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.699 Beiträge
 
Delphi 7 Professional
 
#37

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 23. Jun 2010, 11:07
Jo, aber der Code läuft noch mit JWSCL unter D6.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
461 Beiträge
 
Delphi XE2 Professional
 
#38

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 28. Nov 2011, 21:16
Jo, aber der Code läuft noch mit JWSCL unter D6.
hier ganz ohne JEDI:

Delphi-Quellcode:

function OpenShellProcessToken(ProcessName: String;
  var hToken: THandle): Boolean;
var
  hSnapshot,
  hProcess: THandle;
  Process: TProcessEntry32;
begin
  Result := false;
  hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapshot <> 0) and (hSnapshot <> INVALID_HANDLE_VALUE) then
  try
    FillChar(Process, SizeOf(Process), #0);
    Process.dwSize := SizeOf(Process);
    if Process32First(hSnapshot, Process) then
    repeat
      if (AnsiLowerCase(Process.szExeFile) =
        AnsiLowerCase(ProcessName)) then
      begin
        hProcess :=
          OpenProcess(PROCESS_ALL_ACCESS, false, Process.th32ProcessID);
        if (hProcess <> 0) and (hProcess <> INVALID_HANDLE_VALUE) then
        try
          Result := OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hToken);
        finally
          CloseHandle(hProcess);
        end;
        Break;
      end;
    until (not Process32Next(hSnapshot, Process));
  finally
    CloseHandle(hSnapshot);
  end;
end;

function CreateUserProcess(lpApplicationName: PChar; lpCommandLine: PChar;
  lpCurrentDirectory: PChar; var ProcessInfo: TProcessInformation): Boolean;
var
  WTSGetActiveConsoleSessionId: function: DWord; stdcall;
  WTSQueryUserToken: function(SessionId: ULONG;
    var phToken: THandle): BOOL; stdcall;
  CreateEnvironmentBlock: function(lpEnvironment: PPointer; hToken: THandle;
    bInherit: BOOL): BOOL; stdcall;
  DestroyEnvironmentBlock: function(lpEnvironment: LPVOID): BOOL; stdcall;
var
  hUserToken : THandle;
  ReturnLength,
  Environment: Pointer;
  StartupInfo: {$IFDEF UNICODE}TStartupInfoW{$ELSE}TStartupInfoA{$ENDIF};
begin
  Result := false;
  @CreateEnvironmentBlock :=
    GetProcAddress(LoadLibrary('userenv.dll'), 'CreateEnvironmentBlock');
  @DestroyEnvironmentBlock :=
    GetProcAddress(LoadLibrary('userenv.dll'), 'DestroyEnvironmentBlock');
  if (not Assigned(CreateEnvironmentBlock)) or
    (not Assigned(DestroyEnvironmentBlock)) then Exit;
  @WTSGetActiveConsoleSessionId :=
    GetProcAddress(LoadLibrary('kernel32.dll'), 'WTSGetActiveConsoleSessionId');
  @WTSQueryUserToken :=
    GetProcAddress(LoadLibrary('wtsapi32.dll'), 'WTSQueryUserToken');
  if (Assigned(WTSGetActiveConsoleSessionId) and
    Assigned(WTSQueryUserToken)) then
  begin
    Result := WTSQueryUserToken(WTSGetActiveConsoleSessionId, hUserToken);
  end else
  begin
    Result := OpenShellProcessToken(GetShellProcName, hUserToken);
  end;
  if Result then
      try
        if CreateEnvironmentBlock(@Environment, hUserToken, false) then
        try
          ZeroMemory(@StartupInfo, sizeof(StartupInfo));
          StartupInfo.cb := SizeOf(StartupInfo);
          StartupInfo.lpDesktop := 'winsta0\default';
          StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
          StartupInfo.wShowWindow := SW_SHOWDEFAULT;
          Result := CreateProcessAsUser
          (hUserToken,
          lpApplicationName,
            lpCommandLine,
            nil,
            nil,
            false,
            CREATE_NEW_CONSOLE or CREATE_DEFAULT_ERROR_MODE or CREATE_UNICODE_ENVIRONMENT,
            Environment,
            lpCurrentDirectory,
            StartupInfo,
          ProcessInfo);
        finally
          DestroyEnvironmentBlock(Environment);
        end;
  finally
    CloseHandle(hUserToken);
  end;
end;
Habe diesen Code umgebaut, funktioniert ab Windows 2000, ohne Admin Rechte ....

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
squetk

Registriert seit: 29. Aug 2004
Ort: Cottbus
109 Beiträge
 
Delphi XE2 Professional
 
#39

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 28. Nov 2011, 23:14
Wo kann man die Funktion GetShellProcName finden?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo
Online

Registriert seit: 5. Jan 2005
Ort: Stadthagen
6.141 Beiträge
 
Delphi 2010 Professional
 
#40

AW: Programm von Dienst starten lassen (Jetzt aber wirklich mal)

  Alt 28. Nov 2011, 23:36
Wo kann man die Funktion GetShellProcName finden?
Über die Suchfunktion?
Kaum macht man's richtig - schon funktioniert's
Nachdenkliche Menschen denken oft warum sie nicht schon vorher daran gedacht haben.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf