AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Anderes Programm mit Administratorrechten aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Anderes Programm mit Administratorrechten aufrufen

Ein Thema von freimatz · begonnen am 10. Nov 2020 · letzter Beitrag vom 20. Nov 2020
Antwort Antwort
freimatz
Online

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 07:01
Hallo,
Danke für die Hinweise. Ich habe mich ein bischen eingelesen. Ich habe eine Lösung die bei neuen Versionen des Hauptprogramms funktioniert (zumindest bei mir).
Warum empfiehlst Du und viele andere ShellExecute? In deinem Link steht doch "Applications should use the CreateProcess function."

Auch ist mir immer noch nicht klar warum das Programm ohne "runas" nicht startet.
Überdies ist mir nun klar, dass es keine ausreichende Lösung ist wenn ich das jetzt ändere. Wenn z.B. jemand noch eine ältere Ausgabe des Hauptprogramms hats (das noch WinExec verwendet) so kann er das neue "andere Programm" immer noch nicht starten. (Das "andere Programm" ist ein Updater.)

Bleibe dann nicht nur das "andere Programm" nicht als Administrator laufen zu lassen sondern normal? So können alte Programme das noch staren. Dafür müsste dann das "andere Programm" dann ein weiteres Programm mit Administatorrechten starten dass dann tut was man nur mit Administatorrechten tun kann.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#2

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 10:53
Warum empfiehlst Du und viele andere ShellExecute? In deinem Link steht doch "Applications should use the CreateProcess function."
Ganz einfach: ShellExecute ist einfacher.
CreateProcess ist die deutlich mächtigere Funktion, aber als Ersatz für WinExec ist ShellExecute einfach mal schnell ersetzt, CreateProcess braucht ein wenig mehr Code.

Bleibe dann nicht nur das "andere Programm" nicht als Administrator laufen zu lassen sondern normal? So können alte Programme das noch staren. Dafür müsste dann das "andere Programm" dann ein weiteres Programm mit Administatorrechten starten dass dann tut was man nur mit Administatorrechten tun kann.
Es kann sich auch selbst ein zweites Mal mit Adminrechten starten und die erste Instanz bei fehlenden Rechten mit einer Meldung gleich wieder beenden. So nach dem Motto: Es werden Adminrechte benötigt! [Ok][Cancel].
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 12:40
ein zweites Mal?


Danke
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 10:56
So, das scheint auch bei den Testern zu funktionieren.
Allerings etwas anderes nicht und das führt mich zur gegenteiligen Frage:

Nun läuft mein Programm mit Administratorrechten. Wie kann ich daraus nun ein anderes Programm aufrufen, das ohne Administratorrechte läuft. Gibt es das Gegenteil zu "runas"?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 12:22
bezüglich ShellExecute mit lpOperation
siehe HKEY_CLASSES_ROOT\.exe -> HKEY_CLASSES_ROOT\exefile

und da findet man dann nicht nur HKEY_CLASSES_ROOT\exefile\shell\runas, sondern auch \runasuser



ansonsten gibt es auch noch die runas.exe,
sowie MSDN-Library durchsuchenCreateProcessAsUser, MSDN-Library durchsuchenCreateProcessWithLogon usw.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Nov 2020 um 12:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#6

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 14:36
Nun läuft mein Programm mit Administratorrechten. Wie kann ich daraus nun ein anderes Programm aufrufen, das ohne Administratorrechte läuft. Gibt es das Gegenteil zu "runas"?
Das Problem ist ja, dass auch mehrere Benutzer angemeldet sein können, das heißt du müsstest ja auch noch herausfinden in welchem Benutzerkontext du das Programm ausführen möchtest.

Irgendwie klingt das wie ein Updatetool, kann das sein? Für ein solches Tool habe ich das so gelöst, dass ich ein Programm im ursprünglichen Kontext habe weiter laufen lassen und dann von dort aus das aktualisierte Programm gestartet habe.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 17:07
Man kann auch via Parameter den Namen, die SID oder gleich das Token des Users mitgeben,
bzw. beim Start auslesen in welchem User der ParentProcess läuft.

Token für CreateProcessWithToken oder CreateProcessAsUser hat auch den Vorteil, dass man z.B. zu dem Nutzer kein Passwort benötigt.


Und ja, natürlich kann man den ursprünglichen Process laufen lassen und der macht dann dort weiter, wo es im ursprünglichen User weitergeht.
Kann er sich eventuell auch via IPC sagen lassen, was er machen soll. (aber hier aufpassen, dass man keine Sicherheitslecks einbaut und sich fremde Programme/Würmer/Trojaner so in den anderen Account reinschleichen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Nov 2020 um 17:10 Uhr)
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 23:21
shellexecute mit 'runas'


Das ist lesenswert:
https://www.codeproject.com/Articles...finitive-Guide
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 14. Nov 2020, 10:24
Irgendwie klingt das wie ein Updatetool, kann das sein? Für ein solches Tool habe ich das so gelöst, dass ich ein Programm im ursprünglichen Kontext habe weiter laufen lassen und dann von dort aus das aktualisierte Programm gestartet habe.
Du hast recht es ist ein Updatetool. Die Idee ist gut, das Tool startet nun sich selbst wieder mit "runas". Leider muss ich dann schon das nächste Fass aufmachen wie himitsu schon schrieb: "Kann er sich eventuell auch via IPC sagen lassen, was er machen soll.".

In bestimmten Fällen muss das elevated Updatetool dem normalen sagen, welches Programm er dann starten soll.
(Seit Monaten mache ich an einer Verbesserung rum und ein Fass nach dem anderen geht auf. Gibts hier im Forum einen Bereich zum sich ausheulen? )

Also gut dann das nächste Fass: IPC. Das dann besser nicht in diesem Thread.
  Mit Zitat antworten Zitat
freimatz
Online

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 20. Nov 2020, 19:29
dummy zum Löschen (das mit IPC war leicht)
  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 10:41 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