Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 18.12.05 21:52 
Hallo!

Eine vielleicht ungewöhnliche Frage:
Bei Windows gibt's doch "Ausführen als...". Wie kann man erreichen, dass ein Programm, zB. aus dem AllUsers-Autostart-Ordner, automatisch mit Admin-Rechten startet? Wenn erforderlich, könnte man es ja mit ShellExecute von einem anderen Programm aus starten.

Nun weiss ich schon, dass ganau das nicht erwünscht ist, das ist ja der Sinn von eingeschränkten Konten. Aber mein Programm synchronisiert und aktualisiert Datenordner des Benutzerkontos mit dem Admin-Konto oder sonstige Ordner, und das kann es ja normalerweise nur mit Admin-Rechten. Wenn möglich, sollte es das aber jedesmal beim Systemstart tun, egal, welches Konto.


Moderiert von user profile iconTino: Topic aus Off Topic verschoben am Mo 19.12.2005 um 10:37

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: So 18.12.05 23:03 
schau dir einfach den Syntax vom Kommandozeilenbefehl runas an ;) einfach runas in der Kommandozeile eingeben.
ein Beispiel wäre dieses hier (glaube ich):
ausblenden Delphi-Quelltext
1:
runas /profile /user:Admin					

Wenn das Konto ein Passwort hat, muss dann aber jeder Nutzer bevor das Prog startet das Passwort eingeben!
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: So 18.12.05 23:17 
user profile icongalagher hat folgendes geschrieben:
Aber mein Programm synchronisiert und aktualisiert Datenordner des Benutzerkontos mit dem Admin-Konto oder sonstige Ordner, und das kann es ja normalerweise nur mit Admin-Rechten. Wenn möglich, sollte es das aber jedesmal beim Systemstart tun, egal, welches Konto.


riecht mir nach Dienst.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 18.12.05 23:19 
Yapp, das mit dem Passwort ist das Problem daran. Alternativ kannst Du Dein Programm aber auch als Service starten, der das Ganze dann beim Systemstart schon macht. Diesen kannst Du unter Administratorrechten einrichten und bist unabhängig vom Benutzer.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 18.12.05 23:26 
user profile iconUGrohne hat folgendes geschrieben:
Alternativ kannst Du Dein Programm aber auch als Service starten, der das Ganze dann beim Systemstart schon macht.

Klingt sehr gut! Bis jetzt ist es ein ganz normales Delphi-Programm, man kann je 2 Ordner angeben, die es abgleichen soll. Das klappt auch schon perfekt. Und wie starte ich es nun als Service?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
wolke
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 240



BeitragVerfasst: So 18.12.05 23:30 
so einfach ist das nicht, zumindest die saubere lösung erfordert ein klein wenig anderes delphi-codegerüst. die suche hier im forum oder bei google (dienst/service) sollte dir weiterhelfen.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 19.12.05 11:24 
user profile iconwolke hat folgendes geschrieben:
so einfach ist das nicht

Das habe ich befürchtet. Ok, man kann eine Service-Anwendung machen, aber die erlaubt keine Steuerelemente, mein Programm hat aber eine Oberfläche mit Buttons, einem ShellTreeView usw. Ich dachte eher an einen Eintrag in die Registry, damit das Programm von dort mit Admin-Rechten ausgeführt wird.

Oder: Wie kann ich ein bestehendes Programm in einen Dienst umwandeln? Ich bin da auf die Unit SvcMgr gestossen, doch die allein nützt nichts, deshalb wird es noch kein Dienst.

runas klappt zwar, aber die Kennworteingabe stört.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 19.12.05 11:27 
user profile icongalagher hat folgendes geschrieben:

Oder: Wie kann ich ein bestehendes Programm in einen Dienst umwandeln? Ich bin da auf die Unit SvcMgr gestossen, doch die allein nützt nichts, deshalb wird es noch kein Dienst.

Du wirst es schon als Dienst schreiben müssen.

Zitat:
runas klappt zwar, aber die Kennworteingabe stört.

Wenn du das Passwort nicht irgendwo speicherst, wirst du da nicht drumrumkommen.

Warum postest du eigentlich alle deine Delphi Fragen im Offtopic? :-?


Zuletzt bearbeitet von Luckie am Mo 19.12.05 11:34, insgesamt 2-mal bearbeitet
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 19.12.05 11:30 
user profile iconLuckie hat folgendes geschrieben:
Warum psostest du eieghntlich alle deine Delphi Fragen im Offtopic? :-?


Erster von 32 :twisted:

Zitat:
32 die strengstens darauf hinweisen, dass die Glühbirnendiskussion nicht ins Off-Topic gehört und woanders hätte gepostet werden müssen.


Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 19.12.05 11:37 
user profile iconLuckie hat folgendes geschrieben:
Warum psostest du eieghntlich alle deine Delphi Fragen im Offtopic? :-?

Weil ich zuerst dachte, dass das nicht nur Delphiprogramme betrifft, bzw. man es mit Delphi programmieren muss, sondern es eine allgemeine Lösung gibt, ein Programm mit bestimmten Rechten zu starten:
user profile icongalagher hat folgendes geschrieben:
Wie kann man erreichen, dass ein Programm, zB. aus dem AllUsers-Autostart-Ordner, automatisch mit Admin-Rechten startet?

Dass es dann eine Delphi-Frage wurde, ergab sich eben so :wink: !

Aber alles neu machen werde ich nicht, denn die Steuerelemente kopieren und im Service-Fenster einfügen geht nicht, und ich kann auf die Oberfläche nicht verzichten, denn irgendwo muss man ja eingeben, welche Ordner man haben möchte. Vielleicht gibt's noch einen anderen Weg!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 19.12.05 11:50 
Dienste können keine Benutzeroberfläche haben - du musst dein Programm in einen Dienst, der den eigentlichen Job ausführt und ein normales Programm zur Konfiguration des Dienstes aufteilen. Das Konfigurationsprogramm kann dann unter einem normalen Benutzeraccount laufen und auch im Autostart gestartet werden.

Eine andere Möglichkeit ist es, das Synchronisationsprogramm mit CreateProcessAsUser unter dem Admin-Account zu starten. Das ist aber sicherheitstechnisch ungünstig, weil du dann das Admin-Passwort irgendwo speichern musst, damit sich das Startprogramm als Admin anmelden kann. Und da da kommst du nicht darum herum, dein Programm in einen Job, der als Admin läuft und ein Startprogramm, das sich als Admin anmeldet und dann den Job startet, aufzuteilen.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 19.12.05 11:50 
user profile icongalagher hat folgendes geschrieben:
user profile iconLuckie hat folgendes geschrieben:
Warum psostest du eieghntlich alle deine Delphi Fragen im Offtopic? :-?

Weil ich zuerst dachte, dass das nicht nur Delphiprogramme betrifft, bzw. man es mit Delphi programmieren muss, sondern es eine allgemeine Lösung gibt, ein Programm mit bestimmten Rechten zu starten:

Wie schon gesagt wurde entweder mit dem Konsolenprogramm von Windows RunAs oder mit der API Funktion Suche im MSDN CREATEPROCESSWITHLOGONW Programm und Beispiel code findest du hier: runasuser.michael-puff.de

Zitat:

Aber alles neu machen werde ich nicht, denn die Steuerelemente kopieren und im Service-Fenster einfügen geht nicht, und ich kann auf die Oberfläche nicht verzichten, denn irgendwo muss man ja eingeben, welche Ordner man haben möchte. Vielleicht gibt's noch einen anderen Weg!

Interaktive Dienste können eine Benutzeroberfläche haben, davon ist aus Sicherheitsgründen aber abzuraten.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 19.12.05 18:36 
user profile iconLuckie hat folgendes geschrieben:
Programm und Beispiel code findest du hier: runasuser.michael-puff.de

Danke, das hilft mir weiter! Leider bekomme ich das Dienstprogramm nicht hin - ich habe der Einfachheit halber Unit1 meines "normalen" Programms eingebunden, um dann mit dem Dienstprogramm darauf zugreifen zu können. Ich erhalte aber eine Zugriffsverletzungs-Meldung, sobald ich es starte. Ich denke, das liegt daran, dass Form1 nicht erzeugt wird; wenn ich Form1 := TForm1.Create(Self) angebe, nützt das auch nichts.

Dazu möchte ich sagen: Ich weiss, das das nicht ganz sauber ist. Man sollte den Code so schreiben, dass das Dienstprogramm selbst die Dateien, die es kopieren soll, ermittelt. Genau das macht aber bereits mein "normales" Programm mittels eines TreeeView's schon, ich müsste also das Rad ein zweites Mal erfinden. Das wollte ich mir zuerst zwar ersparen, habe dann aber doch versucht, ein TTreeView in meinem Dienstprogramm zu erzeugen (.Create). Das klappt auch nicht. Also muss man es anders machen.

Um das zu lernen, ist ein intensives Befassen mit dem Thema Dienstprogramme erforderlich, bevor ich weitermache. Ich werde das also tun oder - einfacher - es lassen und RunAsUser.exe verwenden. Mein Programm ist praktisch fertig, etwas anderes kann ich noch immer machen!

Danke euch für eure Unterstützung!

//Edit: da fällt mir ein: Wenn RunAsUser.exe das Passwort, das ja in der Registry irgendwo steht, überprüfen kann, dann kann man ja prinzipiell ein Programm schreiben, das das Passwort ausliest und gleich verwendet, oder?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!