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 Mit CreateProcessWithLogonW PDF starten? Alternative? (https://www.delphipraxis.net/36049-mit-createprocesswithlogonw-pdf-starten-alternative.html)

freakfly 15. Dez 2004 07:01


Mit CreateProcessWithLogonW PDF starten? Alternative?
 
Guten Morgen!

Ich beschäftige mich zur Zeit mit MSDN-Library durchsuchenCreatProcessWithLogonW. Ich will darüber eine PDF starten, mit den Rechten eines anderen Benutzers. Leider startet die Funktion nur *.exe Dateien. Gibts da irgendwie ne Lösung/Alternative oder auch Kombination mit Shellexecute?

Gruß, freakfly

freakfly 15. Dez 2004 10:07

Re: Mit CreateProcessWithLogonW PDF starten? Alternative?
 
Hmmm.. Ich versuch gerade erst MSDN-Library durchsuchenLogonUser und dann ShellExecute zu machen, aber irgendwie will das nicht funzten!

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var bStart : boolean;
    s : string;
    h : THandle;
begin
  bStart := false;
  application.showmainform := false;
   //ParamStr (1)
   bStart := LogonUser(
      'user23',      
      'mydomain',        
      '007',        
      LOGON32_LOGON_NETWORK,
      LOGON32_PROVIDER_DEFAULT,
      h);
    if not bStart then
      begin
          str(getLastError,s);
          showMessage('Prozess konnte nicht erstellt werden:'+ #13+
            SysErrorMessage(Strtoint(s)));
            Application.Terminate;
      end
    else
      begin
        ShellExecute(Application.Handle,'open',PCHar('\\server1\user23$\home.pdf'),nil,nil,sw_ShowNormal);
       // Application.Terminate;
      end;
end;
Weiss jemand warum das nicht geht, oder hat Tips zum Thema?

Gruß, freakfly

Motzi 15. Dez 2004 10:15

Re: Mit CreateProcessWithLogonW PDF starten? Alternative?
 
Selbst wenn du per LogonUser erfolgreich einen anderen User anmeldest bekommst du nur ein Token zurück, dass du zb für CreateProcessAsUser o.ä. verwenden kannst. ShellExecute startet den neuen Prozess immer als Child-Prozess deines Prozesses und erbt damit auch den Security-Kontext. Was du machen könntest: den AcrobatReader (oder welches Programm auch immer mit PDF verknüpft ist) per CreateProcessWithLogonW starten und die zu öffnende PDF-Datei per DDE übergeben..

freakfly 15. Dez 2004 10:44

Re: Mit CreateProcessWithLogonW PDF starten? Alternative?
 
An das dachte ich auch schon.. Da das Programm aber inner Domain verwendet werden soll, weiss ich ja nie, wo der Acrobat installiert ist. Schön wäre halt auch wenn es mit *.doc Dateien auch funktionieren würde...

Motzi 15. Dez 2004 11:18

Re: Mit CreateProcessWithLogonW PDF starten? Alternative?
 
Zitat:

Zitat von freakfly
An das dachte ich auch schon.. Da das Programm aber inner Domain verwendet werden soll, weiss ich ja nie, wo der Acrobat installiert ist. Schön wäre halt auch wenn es mit *.doc Dateien auch funktionieren würde...

Naja, man kann ja auslesen mit welchem Programm die Endung .pdf Verknüpft ist... und dasselbe einfach auch mit .doc ...

freakfly 15. Dez 2004 11:24

Re: Mit CreateProcessWithLogonW PDF starten? Alternative?
 
Zitat:

Naja, man kann ja auslesen mit welchem Programm die Endung .pdf Verknüpft ist... und dasselbe einfach auch mit .doc ...
Hast du da etwa nen heißen Tip, ein paar Schlagwörter oder gar etwas Code dazu? :-D

freakfly 15. Dez 2004 11:35

Programmverknüpfung feststellen
 
Wenn es jemanden interessieren sollte, hier hab ich was gefunden...

Delphi-Quellcode:
uses
ShellApi;

resourcestring
SFILE_NOT_FOUND = 'Die angegebene Datei "%s" konnte nicht gefunden werden.';
SNO_ASSOCIATED_EXE = 'Für den angegebenen Dateitypen ist kein ausführbares Programm verfügbar.';
SPATH_NOT_FOUND = 'Der angegebene Pfad "%s" konnte nicht gefunden werden.';
SEXE_INVALID = 'Das ausführbare Programm ist keine gültige Win32-Anwendung.';

function GetExecutable(const AFileName: string): string;
var
FileName, Directory: string;
begin
FileName := ExtractFileName(AFileName);
Directory := ExtractFilePath(AFileName);
Setlength(Result, MAX_PATH);
FillChar(Pointer(Result)^, Length(Result), #0);
case FindExecutable(Pointer(FileName), Pointer(Directory), Pointer(Result)) of
0: OutOfMemoryError;
31: MessageDlg(SNO_ASSOCIATED_EXE, mtError, [mbOk], 0);
ERROR_FILE_NOT_FOUND: MessageDlg(Format(SFILE_NOT_FOUND, [FileName]),
mtError, [mbOk], 0);
ERROR_PATH_NOT_FOUND: MessageDlg(Format(SPATH_NOT_FOUND, [Directory]),
mtError, [mbOk], 0);
ERROR_BAD_FORMAT: MessageDlg(SEXE_INVALID, mtError, [mbOk], 0);
end;
Setlength(Result, StrLen(Pointer(Result)));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.

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