Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 23.11.07 16:07 
Ich habe einen Dienst(TService) geschrieben, der zur Laufzeit eine Anwendung starten soll. Für diese Zwecke verwende ich:

ausblenden Delphi-Quelltext
1:
2:
3:
ShellExecute(0'open', PChar(FieldByName('SETUP').AsString), nilnil, SW_SHOWNORMAL) ;
//oder
WinExec(PChar(FieldByName('SETUP').AsString),SW_NORMAL) ;


Das Field Setup hat definitiv einen Wert.
Es handelt sich nicht um Schadsoftware sondern um ein Updatedienst für Aussendienstlaptops, daher die Kommuniktion mit der Datenbank.


Problem: Die Setup startet nicht. Wenn ich die Befehle in einer norman Anwendung ausprobiere, startet die Anwendung, aber nicht als Dienst. Der Dienst läuft als lokals System. Kann das daran liegen?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 23.11.07 16:48 
1. Welches OS?

2. Dumme Idee!

3. SEHR Dumme Idee!!!

4. ShellExecute ist zum Spielen; sowas macht man wenn schon mit CreateProcessAsUserW

5. AUF JEDEN FALL die Rechte impersonaten!!!

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 23.11.07 18:40 
user profile iconmexx hat folgendes geschrieben:

...
Problem: Die Setup startet nicht. Wenn ich die Befehle in einer norman Anwendung ausprobiere, startet die Anwendung, aber nicht als Dienst. Der Dienst läuft als lokals System. Kann das daran liegen?


Klar: das lokale System hat keinerlei Rechte im Netzwerk (möglicherweise heisst es deshalb so). Die Anwendung kann daher nur unter einem anderen Benutzer-Account mit den entsprechenden Rechten gestartet werden.

Gruss Reinhard
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Fr 23.11.07 21:13 
user profile iconBenBE hat folgendes geschrieben:
4. ShellExecute ist zum Spielen; sowas macht man wenn schon mit CreateProcessAsUserW

Wiederspruch, Sir :-) Selbst MS sagt das man ab Vista ShellExecute nehmen sollte damit man nicht mit dem UAC und erweiterten Manifest in konflikt kommt.

zu 1+2 vollkommene zustimmung. Spätesten ab vist bekommt man Probleme wenn die gestartete Anwendung mit dem User interagieren soll. Das geht nämlich nicht mehr! Erst mit Registry-"Patches" ist dieses potentielle Sicherheitloch wieder geöffnet. Hier wirst du eine Anwendung benötigen die automatisch bei Anwenderlogin ebenfalls startet um sowas zu erledigen.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 08:20 
Um die Aussage, dass es sich um eine dumme Idee handeln würde, zu entkräften, hier mal der Hintergrund dieses Projektes.

Hintergrund:
In meiner Firmengruppe gibt es ca.50 Laptops, welche von Aussendienstmitarbeitern genutzt werden. Manche gehören der Firma, andere gehören selbstständigen Mitarbeitern, welche als Subunternehmer für die Firma tätig sind. Die Firma hat auch noch mehrere Tochterfirmen im Ausland, welche ebenfalls Subunternehmer beschäftigen. Ich sitze im Hauptstandort und ärgere mich jedes mal darüber, fremde Laptops ins Netzwerk lassen zu müssen. Mittlerweile laufen die alle über ein DHCP, auch die Subnetze an anderen Standorten. Die sind alle per VPN verbunden. Aber der DHCP reicht mir nicht, ich will mehr.

Aufgabe des Dienstes:
Der Dienst hat als primäre Aufgabe, sich an der systemweiten IP-Protokolierung anzuschliesen. Jede Anmeldung an die Domain wird in einer Datenbank erfasst. So kenne ich die IP eines jeden Benutzers. Das spart mir lästigen Nachfragen, wie die IP des Users ist, wenn er per Remote Hilfe anfordert und ich habe eine Quelle, wo ich nachsehen kann, wenn mal wieder jemand sehr viel Traffic verursacht oder eine IP-Adresse negativ auf der URL-Liste auftaucht. Fakt ist, ich will immer wissen, wer wann wo im Netzwerk was gemacht hat/gerade tut. Bei Domain-PCs kein Problem, aber die Laptops kann/darf ich nicht in die Domain einbinden.

  1. Zu großer Aufwand, weil die Laptops auf der ganzen Welt verstreut sind und nur selten bei mir sind, um die Domaineinbindung zu machen. Ich verrate den ja nicht das Passwort!!!
  2. Manche Laptops gehören nicht der Firma, aber Sie halten sich an gewisse Richtlinien, wenn Sie unser Netzwerk nutzen wollen/müssen. Dazu gehört auch KEIN VISTA!!!


Der Dienst protokoliert also die IP-Adresse des Laptops. Sobald ein Laptop hier im Netz ist, ob nun Zweigstelle im Ausland oder per Tunnel am Netz hängt, ich weiss es! Ich möchte aber auch, dass ich mit diesen Dienst wichtige Sicherheitsupdates unserer Virensoftware, des Dienstes selbst, XP-Sicherheitsupdates, Softwareupdates, und und und installieren kann. Die IP-Prokollierungsdatenbank ist von mir dahingehend vorbereitet, auch der Dienst selbst, weiss, wann er welches Update zu installieren hat. Aber er startet es nicht!

Ich habe neben ShellExecute und WinExec noch CreateProzess gefunden und diesen Quelltext ausm Netz mal ausprobiert.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Function ExecProgram( Const csCmdLine : String; bHide : Boolean ) : Boolean;
Var
  StartupInfo : TStartupInfo;
  ProcessInfo : TProcessInformation;

Begin
  FillChar( StartupInfo, SizeOf( TStartupInfo ), 0 );
  With StartupInfo do Begin
    cb := SizeOf( TStartupInfo );
    dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    If bHide then wShowWindow := SW_HIDE
             else wShowWindow := SW_SHOWNORMAL;
  End;

  Result := CreateProcess( nil, PChar( csCmdLine ), nilnil, False,
               NORMAL_PRIORITY_CLASS, nilnil, StartupInfo, ProcessInfo );
End;


Wenn ich die Funktion nun nutze, erscheint im Taskmanager der Prozess. Aber ich sehe keine Oberfläche! Da die Anwenden Funktionen überhaupt nichts gebracht haben, halte ich das für ein kleinen Erfolg. Wie bringe ich den Prozess nun wirklich zum laufen oder weise Ihm den aktiven Benutzer zu, damit er läuft? Den Namen des aktiven Benutzers kenne ich übrigens. Immerhin wird der per IP-Protokolierung in die Datenbank geschrieben.

Ein Problem bleibt: Wie starte ich über einen Dienst eine Anwendung, ob nun lokal oder aus dem Netzwerk?

Danke für jeden Tipp!

PS: Wenn der Dienst die Anwendung nicht übers Netzwerk direkt starten kann, könnte ich eine lokale *.BAT-Datei zur Laufzeit schreiben, welche lokal auf den Laptop die Setup startet oder ausm Netzwerk kopiert und dann startet.

PS2: Um auch einen noch besseren Eindruck dieser Programme zu geben, hier mal 2 Bilder der Hauptanwendung, die nur bei den Admins vorliegt. Das System ist eine Eigenentwicklung und soll keinen Schönheitspreis gewinnen. Es soll nur dem Zweck dienen und das macht es erfolgreich. Alternative käufliche oder kostenlose IP-Protokollierungsprogramme oder Netzwerkscanner, erzeugen unnötig Traffic oder machen mehr als eigentlich benötigt. Daher eine Eigenentwicklung!
Einloggen, um Attachments anzusehen!
_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.11.07 11:35 
Dafür muss der Dienst das Recht haben mit dem Desktop zu interagieren glaube ich. In der Liste der Dienste in der Verwaltung (Systemsteuerung), gibt es in den Eigenschaften des Dienstes auf dem Reiter Anmelden die entsprechende Einstellung.
Ich vermute mal, um eine normale Anwendung zu starten, muss das Häkchen dort aktiviert sein. (Habe es aber nicht getestet.)

Seit der Umstellung auf Vista bei einem Bekannten in der Firma weiß ich allerdings, dass das dort wohl gar nicht mehr geht. (Es ist ja auch ein Sicherheitsrisiko.) Bei den entsprechenden Rechten wurde vieles restriktiver, so dass man dort ein wenig testen muss, was noch geht, bzw. es nachlesen.
Die deutlich gesunkene Anzahl der Sicherheitsprobleme (um die sich mein Bekannter kümmern muss) gleicht diese Schwierigkeiten aber mehr als aus, er hat plötzlich kaum noch Überstunden und wir können ein wenig mehr an gemeinsamen Projekten arbeiten^^.

Sollte jedenfalls die Desktop-Interaktion nicht ausreichen müsstest du vielleicht vor ShellExecute ein Recht anfordern, um ShellExecute oder CreateProcess o.ä. benutzen zu können. Aber das muss ich mir bei XP auch noch einmal ansehen, ich habe ja nen Testrechner da. (Auf den meisten PCs habe ich nur noch Vista.)
Ich werde mir das heute Abend oder morgen mal ansehen.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 12:11 
Meine Situation schränkt mich aber dahingehend ein. Ich kann die erwähnte Einstellung nicht an den Laptops vornehmen, weil die Laptops nur selten hier sind. Ich kann den Dienst mit einer kleinen Steup nur an die Aussendienstmitarbeiter per Mail senden. Leider sind die EDV technisch nicht sehr fit und auch etwas faul. Ich glaube nicht, dass die solche Dienstkonfigurationen durchführen! Schlimm, aber ist leider so! Der Dienst muss das also von sich aus beherrschen.

In einen anderen Delphiforum habe ich sowas wie CreateProzessAsUser oder CreateProzessAsLoginW gelesen. Beide Funktionen arbeiten mit den Benutzerprofilen. Nachteil ist jedoch, dass ich Sie kennen muss. Ich kenne aber maximal den Benutzernamen. Kennst Ihr vielleicht diese beiden Funktionen?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.11.07 12:32 
user profile iconmexx hat folgendes geschrieben:
Ich kann die erwähnte Einstellung nicht an den Laptops vornehmen, weil die Laptops nur selten hier sind. Ich kann den Dienst mit einer kleinen Steup nur an die Aussendienstmitarbeiter per Mail senden.
Das Setup müsste eben die erwähnte Einstellung vornehmen, wenn das wirklich die Lösung des Problems ist. (Ob es das ist, werde ich nachher wie gesagt mal testen.)
Ich habe jetzt den Weg wie man es umstellen kann nur angegeben, weil es zum Testen ausreicht und ich außerdem nicht weiß wie man diese Einstellung per Setup vornimmt.
Gehen muss es aber, weil ich bei mir schon Dienste hatte, die dies bei der Installation eingestellt bekommen haben.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 12:40 
Ahaaaa, Du hast recht! Mit dem Häckchen für den Datenaustausch, wird die Anwendung angezeigt. Jetzt muss ich nur noch rausfinden, wo sich diese Einstellung verbirgt! Registry oder eine Datei?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 26.11.07 12:50 
Ahh, das ist in Delphi die Eigenschaft Interactive!
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 12:51 
Ich däm*icher Idi*t! Der Dienst hat doch tatsächlich eine Eigenschaft "Interactive", der dieses Häckchen setzt! Problem gelöst!!! Und ich suche schon wie ein wilder im Netz!!! DAAAAAANKE!!!!!!!!!

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.11.07 13:41 
Dir ist aber klar, dass dein Dienst unter Vista nicht mehr funktioniert, da Vista keine interaktiven Dienste mehr gibt?
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 13:56 
Ja, aber der Einsatz von Vista wird noch laaange dauern. Wir entscheiden, zum Glück, wann Vista zum Einsatz kommt. Wir haben zahlreiche Programme auf den Laptops laufen, welche unter Vista nicht gehen. Vista im privaten Einsatz = okay, aber in Firmen = NEIN DANKE!

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 26.11.07 13:58 
Zweitens: Die Funktionalität, Programme nachzuinstallieren, bietet Windows auch von Haus aus:
Ein Programm, was ich Dir dafür empfehlen kann, ist Hyena. Funktioniert super. Nutz ich selbst, um bei mir im lokalen Netz Rechner zu warten. Dort nen AT-Eintrag auf dem Rechner einstellen und siehe da, Prozess wird gestartet. Vorausgesetzt, man hat die Rechte dafür.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 26.11.07 14:02 
Genau daran scheitert es!

1. Dann laufen 2 Programme, die mich interessieren. Die IP-Protokolierung und der Updater.
2. Ich müsste an jeden Client ran. Unmöglich!!! Bei Weltweit verstreuten Laptops, verliere ich den überblick. Einfacher ist eine Installation eines Dienstes. Da startet man nur eine BATCH-Datei!
3. Nach der Installation wird es noch komlizierter. Es muss konfiguriert werden oder zumindest eine Konfig kopiert werden. Faule und EDV-technisch unbegabte Mitarbeiter werden das verweigern.

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 26.11.07 14:05 
Unattended Setup ist Dir schon ein Begriff?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.11.07 14:31 
user profile iconmexx hat folgendes geschrieben:
Wir haben zahlreiche Programme auf den Laptops laufen, welche unter Vista nicht gehen.

Jetzt rat mal woran das liegt, weil nämlich viele Entwickler zu XP, wenn nicht sogar schon zu NT Zeiten, so gedacht haben wie du.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.11.07 10:29 
user profile iconmexx hat folgendes geschrieben:
Wir haben zahlreiche Programme auf den Laptops laufen, welche unter Vista nicht gehen.
Solche Software ist dann offensichlich nicht (mehr) zum Produktiveinsatz geeignet, schon gar nicht in Firmen, denn daran sieht man ja, dass die Software nicht sauber programmiert ist. (Zum Beispiel schreiben ins Anwendungsverzeichnis, etc.)

user profile iconmexx hat folgendes geschrieben:
Vista im privaten Einsatz = okay, aber in Firmen = NEIN DANKE!
:shock: :rofl:
Ich glaube bei der Sicht der Dinge hat es nicht viel Sinn dazu noch viel zu schreiben. Vor allem ist es nicht das Thema des Threads, deshalb dazu nur so viel:
Der Grund, dass Vista in Firmen nicht so stark eingesetzt wird, liegt an der mangelnden Bereitschaft sich in neue Software einzuarbeiten (sowohl bei Administratoren als auch in der Folge bei den Anwendern) und ist vor allem eine Kostenfrage. Dabei sind die Vorteile vollkommen egal und werden außer Acht gelassen. Bei der Kurzsichtigkeit, die oft bei IT-Entscheidungen herrscht, wird gar nicht darüber nachgedacht, was eigentlich für die Zukunft besser ist.
Die meisten, die Vista jedenfalls sofort so abstempeln, haben Vista nie getestet, sondern einfach nur in irgendwelche Zeitschriften oder Online-Portalen gelesen und glauben den Schwachsinn, der da teilweise verzapft wird. (Was ich sehr schade finde.)
Denn viele der angeblichen Probleme mit Vista, die dort genannt werden, liegen nur daran, dass sich der Autor des Artikels nicht mit der Materie auskennt, das ist teilweise schon fast zum Lachen, wenn es nicht eher traurig wäre...