AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?
Thema durchsuchen
Ansicht
Themen-Optionen

Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

Ein Thema von Guido Eisenbeis · begonnen am 16. Sep 2011 · letzter Beitrag vom 21. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2      
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 01:01
Schreib Dir ein kleines Programm ohne sichtbares Fenster, reagiere auf die Message "WM_QUERYENDSESSION", setze die Lautstärke herab oder mach sonstwas. Im Messagehandler musst Du auf die Message reagieren (result auf TRUE/1) setzen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 02:34
Das Problem lässt sich also darauf reduzieren, dass der Installer die Groupe Policy automatisch einrichten soll.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 05:55
Schreib Dir ein kleines Programm ohne sichtbares Fenster, reagiere auf die Message "WM_QUERYENDSESSION", setze die Lautstärke herab oder mach sonstwas. Im Messagehandler musst Du auf die Message reagieren (result auf TRUE/1) setzen.
Den Ansatz kenne ich und hab ihn auch schon bei meinen Recherchen gefunden. Zum Beispiel hier: vor runterfahren ein programm starten Ich freue mich trotzdem über deinen Vorschlag.

Wie man sehen kann, ist mein Einleitungs-Posting so schon recht lang. (Zum Glück lesen Programmierer gerne ) Da wollte ich nicht auch noch alles überfluten mit "ich hab schon dies und das und das andere auch noch probiert". Zuerst hoffte ich, eine Diskusion in Gange zu kriegen. Dein Beitrag hilft dabei. *freu*

Allerdings befürchte ich bei diesem Ansatz, dass er einen Overhead, (Wikipedia: evtl. entbehrlichen Mehraufwand, der nicht direkt Nutzen erzeugt) nach sich zieht, der sich bei dieser simplen Aufgabe (Lautstärke rückstellen beim Shutdown) nicht "rechnet". Zum Beispiel ist dabei nicht gewährleistet, dass so ein Programm ausgeführt wird, bevor der Abmeldesound ertönt. Oder Beispiel 2, könnten schon Dienste oder gar der Explorer beendet sein, so dass das Programm zum einen seine Funktion nicht ausführen kann, oder zum anderen das Runterfahren blockiert und der PC hängen bleibt. Usw.

Ich habe gehofft, das in dieser Diskussion auch die ein oder andere Information auftaucht, die solche ungewollten Seiteneffekte aufzeigt, denn ich bin nicht mit alle Abläufe beim Shutdown vertraut. Ich behalt die Lösung aber im Hinterkopf.


Das Problem lässt sich also darauf reduzieren, dass der Installer die Groupe Policy automatisch einrichten soll.

Hallo Michael, freue mich, nach langer Zeit wieder was von "alten Bekannten" zu hören. War lange Zeit nicht hier.

Zum Thema: Du hast den Nagel auf den Kopf getroffen! Nach den schon erwähnten Recherchen habe ich den Eindruck, dass die quasi Windows-eigene Möglichkeit mit den Group Policies die sauberste Lösung ist; zumindest was das korrekte Ausführen (m)eines Programms und das anschliesende Runterfahren von Windows betrifft. Bei meinen Tests habe ich sogar problemlos mit einer Wait-Routine arbeiten können. Das heißt, das per Group Policies aufgerufene Test-Programm hatte ein Fenster und die Ausführung des Group Policy Scripts (und somit das Shutdown) wurde pausiert, bis ich das Fenster geschlossen habe. Es wurde zu eine Zeitpunkt ausgeführt, der vor den Windows-Shutdown-Abläufen liegt: Abmeldesound wurde erst nach meinem Test-Programm abgespielt, und es wurden keine Dienste oder Programme beendet, bevor ich das Programm geschlossen habe (reproduzierbar).

Sorry, das war schon wieder lang. Deshalb kurz: Ja, das Problem lässt sich darauf reduzieren, dass der Installer die Groupe Policy automatisch einrichten soll. Damit wär ich zufrieden.

Das bin ich auch schon angegangen, hab auch (wahrscheinlich) alle relevanten Registry-Schlüssel rausgefunden. Dann habe ich aber abgebrochen, als mir die SID Kopfzerbrechen bereitete und ich nicht sicher war, ob alle benötigten MMC-Module dadurch geladen werden, usw. Das sah wieder nach einem Overhead aus, den ich nicht beurteilen konnte. Deshalb erst mal mit euch kurzschließen, was ihr so meint.

Guido.


Edit: Kleine Ergänzungen.

Geändert von Guido Eisenbeis (16. Sep 2011 um 05:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 08:21
Da müsste sich eigentlich was mit dem WindowsScriptingHhost oder Powershell oder wie das heißt machen lassen. Ein Windows Server Admin müsste sich da auskennen. Hast du mal in entsprechenden Foren geguckt oder gefragt? Das Script könnte man ja dann vom Installer ausführen lassen. Bedenke aber, dass ab Vista Windows Programme gnadenlos abwürgte die das Runterfahren zu lange verzögern.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 08:30
Auch nicht simpel, aber machbar: WinLogon. Eine entspreche DLL schreiben, die einen Export names ShutdownHandler hat (bzw. auch LogoffHandler), im entry point DisableThreadLibraryCalls nicht vergessen, und das ganze noch in die Registry eintragen.

Geändert von CCRDude (16. Sep 2011 um 08:35 Uhr)
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 22:09
Leute, ich bin überwältigt von der Flut an Vorschlägen. Ich versuche möglichst knapp auf jeden einzugehen.

Auch nicht simpel, aber machbar: WinLogon. Eine entspreche DLL schreiben, die einen Export names ShutdownHandler hat (bzw. auch LogoffHandler), im entry point DisableThreadLibraryCalls nicht vergessen, und das ganze noch in die Registry eintragen.
Hab mich oberflächlich eingelesen. Vereinfacht ausgedrückt, siehts nach einem systemweiten Hook aus. Prinzipiell ist dies der Vorschlag, der mir am vielversprechendsten aussieht um das eigenliche Problem anzugehen. Nachteil: "Aus großer Macht folgt große Verantwortung." Ein Hook ist eine mächtige Sache. Man kann damit heftige Sachen machen. Aber auch heftig blöde Querschläger erzeugen. Wirklich nicht simpel. Hast du da was an Code für mich, auf den ich aufbauen kann?


mache doch einen "Zwitterlösung". Du erzeugst in der GPO (Gruppenrichtlinie) einen Eintrag das beim Herunterfahre eine .CMD oder .BAT ausgeführt wird. Diese .BAT lässt Du einfach leer.
Jetzt machst Du dein Image.

Dein "Installer" muss jetzt eigentlich nur noch Dein Programm in einen Ordner legen und die .BAT ändern oder ersetzen.
Nicht übel! Vorteil: Würde für (m)eine konkrete Win-Installation / Image was bringen. Nachteil: Es ist nicht für andere geeignet, wäre also "egoistisch". Nee im Ernst: Eine Lösung für mich allein habe ich. Ich wende mich hier ans Forum, um eine Lösung zu finden, die auch andere nutzen können (siehe Posting #1: Doppelklick -> ein paarmal "Weiter" -> und "Fertig".) Werd ich aber mal im Hinterkopf behalten.


Eine generelle Lösung wird es nicht geben, da sich ab Windows Vista das Soundmanagement grundsätzlich geändert hat. ...
Joa, mit der Powershell kannst du das Skript installieren, aber du brauchst dafür wohl ein Extra Paket ... (http://technet.microsoft.com/en-us/l.../dd759177.aspx)

Ich habe mir grad mal ein Powershellscript geschrieben, welches die Lautstärke runtersetzt. Ist schon happig .... Für WinXP geht's noch nur mit dem Skript, für Vista und 7 braucht man dann noch ne dll dazu ...
Auch euch danke für die Antworten. Leider nutzen sie mir nicht viel, denn es geht mir um das (saubere) Starten eine Programms beim Runterfahren, nicht um die System-Lautstärke (siehe Titel des Threads und Posting #1 beim Punkt "Gesuchte Hilfe").

Ich hoffe ich hab niemanden vergessen!?


Klartext: Ich suche eine (saubere) Möglichkeit, um beim Runterfahren von Windows ein Programm zu starten. Sonst nix. (Vorerst. Dann seh ich weiter.)


Immernoch scheint die Lösung per Group Policy am besten. Wenn also niemand eine andere Lösung hat, werde ich einen anderen Thread eröffnen und dort nach dem Einrichten von Group Policies per Code fragen. Eine andere Lösung ist aber nur sinnvoll, wenn ich dafür nicht erst Gehirnchirugie studieren muss. Will sagen: Powershel, .Net-Framework, DLL schreiben für systemweiten Hook, WM_QUERYENDSESSION-Message abfangen, einen Windows Server Admin suchen, usw. ist mir alles zu heftig. Das eine ist zu viel Installation und Aufwand für diese simple Aufgabe, das andere ist für mich nicht einzuschätzen, wieweit die Stabilität des Systems beeinflusst wird. Ich habe bis jetzt über 20 Stunden recherchiert (das Posten hier nicht mitgerechnet) und über 8 Stunden Tests gefahren, um eine Weg zu finden, entsprechende Group Policies per Code zu etablieren. Und ich bin nicht weiter, als nach den ersten 2 Minuten, als ich die Group-Policies-Möglichkeit zum ersten Mal fand.


Guido.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 22:11
Na ja, wenn du eine Rakete bauen willst, wirst du nicht um hin kommen Raktentechnik zu lernen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 22:39
Also mit GPO ist das wieder Betriebssystemabhängig. Z.b. musst Du auf einem Server der Domaincontroller ist das in den Domaincontroller-Richtlinien eintragen. Sowas sieht dann so aus (Beispiel für ein Startup-Script, ansonsten Type=Shutdown):
Code:
<Computer>
    <VersionDirectory>40</VersionDirectory>
    <VersionSysvol>40</VersionSysvol>
    <Enabled>true</Enabled>
    <ExtensionData>
      <Extension xmlns:q1="http://www.microsoft.com/GroupPolicy/Settings/Scripts" xsi:type="q1:Scripts">
        <q1:Script>
          <q1:Command>C:\scripts\enablecache.cmd</q1:Command>
          <q1:Type>Startup</q1:Type>
          <q1:Order>0</q1:Order>
          <q1:RunOrder>PSNotConfigured</q1:RunOrder>
        </q1:Script>
      </Extension>
      <Name>Scripts</Name>
    </ExtensionData>
    <ExtensionData>
An Deiner Stelle würde ich wirklich das Abfangen der QueryEndsession mal versuchen. Ein Miniprogramm (z.b. in der Taskleiste) und es funktioniert. Wir verwenden das in allen unseren Anwendungen um zu verhindern dass die Benutzer die Programme durch versehentliches Abmelden killen.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 08:58
Bedenke aber, dass ab Vista Windows Programme gnadenlos abwürgte die das Runterfahren zu lange verzögern.
Ah, gut, eine wertvolle Info. Danke.


Das Script könnte man ja dann vom Installer ausführen lassen.
Das war meine Idee, als ich mit dem oben genannte Test-Programm probierte. Ich habe eine normale Installation auf meinem physikalischen Rechner gemacht, indem ich gpedit.msc aufgerufen hab und zu den entsprechenden Modulen navigiert und die Einstallungen vorgenommen habe. Dann habe ich mit RegShot172 und viel Handarbeit die relevanten Registry-Keys gesucht und exportiert. Meine "Install-Routine" hab ich dann in VirtualBox in einem jeweils "unbefleckten" Windows gestartet. Die hat dann lediglich NirCmd und ein von mir geschriebenes VBScript an die richtigen Stellen kopiert und die vorher exportierten Schüssel nun zum Importieren aufgerufen. ... Aaaaber, ... dann kamen die oben beschriebenen Probleme mit SID, Laden der MMC-Module, ...


Da müsste sich eigentlich was mit dem WindowsScriptingHhost oder Powershell oder wie das heißt machen lassen. Ein Windows Server Admin müsste sich da auskennen. Hast du mal in entsprechenden Foren geguckt oder gefragt?
Ja, geguckt habe ich, gefragt nicht. Es hat sich einfach immer mehr verzweigt und "komplexiert" (ich weiß, dass das kein Wort ist *grins*). Ich kann einfach nicht abschätzen, wieviel Aufwand da getrieben werden muss. Und ich will echt nicht die ganzen Gegebenheiten der Microsoft Managment Console und deren Zusammenhänge, Abhängigkeiten udn das Vorhandensein in den verschiedenen Windows-Versionen erforschen (z. B. gibts die MMC nicht in XP-Home) um dann am Schluss zu hören: "Mein Gott, nur um beim Runterfahren die Lautstärke runter zu regeln, hättest du dir doch nicht soviel Aufwand machen müssen. Das geht doch ganz einfach mit ???"

Wenn ich halt wüsste, wie groß der Aufwand ist, und ob es wirklich eine andere, einfachere Möglichkeit gibt, wäre mich schon geholfen. Gewünscht ist halt eine Möglichkeit, die mehr oder weniger auf alle aktuellen Win-Versionen anwendbar ist. Wenn ich's nur für mich lösen wollte, würd ich die Registry-Schlüssel hardcoden und gut iss. (Würde meinen Prinzipien widersprechen.) Aber noch geb ich die Hoffnung nicht auf, eine "ordentliche" Lösung zu finden.

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Shutdown-Folder, oder: Wie starte ich ein Prog beim Win-Runterfahren?

  Alt 16. Sep 2011, 09:45
Eine generelle Lösung wird es nicht geben, da sich ab Windows Vista das Soundmanagement grundsätzlich geändert hat. Siehe dazu auch: http://blogs.msdn.com/b/larryosterma...19/471346.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:28 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