AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm als bestimmter Nutzer starten

Ein Thema von Moombas · begonnen am 2. Okt 2018 · letzter Beitrag vom 10. Dez 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Programm als bestimmter Nutzer starten

  Alt 2. Okt 2018, 23:32
Delphi-Quellcode:
function RunAs(const Handle: Hwnd; const Path, Params: string): Boolean;
var
  {$ifdef UNICODE}
    sei: TShellExecuteInfoW;
   {$else UNICODE}
    sei: TShellExecuteInfoA;
  {$endif UNICODE}
begin
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.Wnd := Handle;
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := 'runas';
  sei.nShow := SW_SHOWNORMAL;
  {$ifdef UNICODE}
    sei.lpFile := PWideChar(WideString(Path));
    sei.lpParameters := PWideChar(WideString(Params));
    Result := ShellExecuteExW(@sei);
   {$else UNICODE}
    sei.lpFile := PAnsiChar(AnsiString(Path));
    sei.lpParameters := PAnsiChar(AnsiString(Params));
    Result := ShellExecuteExA(@sei);
  {$endif UNICODE}
end;
Danke himitsu, nun gibt es keine Warnungen und es macht noch das selbe, es führt ein programm im admin-modus aus.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Okt 2018 um 00:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Programm als bestimmter Nutzer starten

  Alt 2. Okt 2018, 23:42
@KodeZwerg: Nein, immer noch falsch. PChar gehört da hin, wenn du TShellExecuteInfo und String statt TShellExecuteInfoW und WideString als Typen benutzt.

Auf einem Delphi mit Unicode macht es keinen Unterschied, aber auf einem Delphi ohne kommen mit dem Code wieder (zu Recht) Warnungen. Wenn du PChar verwendest, funktioniert es in allen Delphis, ob Unicode oder nicht.

Grüße
Dalai

Geändert von Dalai ( 2. Okt 2018 um 23:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 00:10
Ja da brauch ich noch Nachhilfe, mal wird einem gesagt nimm die ohne A/W sondern entscheide per PAnsi/PWide welche Version intern aufgerufen wird (mit d2010 wählt der dann W), nun wieder das ich bei A/W bleiben soll.

Wie ists denn nun richtig?

Habe code updated, so nun korrekt?
(nochmal updated, hatte deine widestring hinweis zuerst vergessen)
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Okt 2018 um 00:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.553 Beiträge
 
Delphi 12 Athens
 
#4

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 00:49
Im Prinzip stimmt es sozusagen schon, aber die IFDEFs können weg, wenn man gleich den passenden Typ verwendet.


compilerabhängig:
Delphi-Quellcode:
function RunAs(const Handle: Hwnd; const Path, Params: string): Boolean;
var
  sei: TShellExecuteInfo;
begin
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.Wnd := Handle;
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := 'runas';
  sei.nShow := SW_SHOWNORMAL;
  sei.lpFile := PChar(Path);
  sei.lpParameters := PChar(Params);
  Result := ShellExecuteEx(@sei);
end;
String ist ein compilerabhängiger Typ, wie z.B. Integer (früher mal 16 Bit und dann 32 Bit ... allerdings wurde der Integer für 64 Bit-CPUs eingefroren und dafür was Neues erfunden, welches in Delphi sich NativeInt nennt)

fest, immer als ANSI: (das Gleiche bei Unicode, mit Wide/W)
Delphi-Quellcode:
function RunAs(const Handle: Hwnd; const Path, Params: AnsiString): Boolean;
var
  sei: TShellExecuteInfoA;
begin
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.Wnd := Handle;
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := 'runas';
  sei.nShow := SW_SHOWNORMAL;
  sei.lpFile := PAnsiChar(Path);
  sei.lpParameters := PAnsiChar(Params);
  Result := ShellExecuteExA(@sei);
end;
Windows bietet für fast alle WinAPIs zwei Versionen der Funktionen an (MSDN-Library durchsuchenShellExecuteExA und MSDN-Library durchsuchenShellExecuteExW)
und Delphi stellt schon immer diese APIs auch als compilerabhängige Variante an. (MSDN-Library durchsuchenShellExecuteEx als Alias für ShellExecuteExA oder ShellExecuteExW ... vor D2009 und ab D2009)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Okt 2018 um 00:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 01:01
@himitsu, ich habe leider gerade nichts zum testen aber noch eine Frage zu dem Unicode, würde bei PChar da nicht Unicode kaputt gehen?
Mein Beispiel betreffend, code wird in russland oder china ausgeführt, würden da dann nicht die multibyte chars zu single byte und das resultat wäre nicht das was man eigentlich wollte?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 01:08
Warum sollte da etwas kaputt gehen?

Unicode-Delphi (alles ab Delphi 2009):

string ist ein Alias für UnicodeString .
PChar ist ein Alias für PWideChar .

ANSI-Delphi (alles vor Delphi 2009):

string ist ein Alias für AnsiString .
PChar ist ein Alias für PAnsiChar .
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Programm als bestimmter Nutzer starten

  Alt 3. Okt 2018, 01:37
Danke Euch Drei, nun ists angekommen. Super Erklärung, das hilft sehr!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:05 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