AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Aktuelles Environment für Dienstemanager bzw. Dienst überneh
Thema durchsuchen
Ansicht
Themen-Optionen

Aktuelles Environment für Dienstemanager bzw. Dienst überneh

Ein Thema von aeberhard · begonnen am 5. Nov 2007 · letzter Beitrag vom 17. Sep 2013
 
aeberhard

Registriert seit: 5. Nov 2007
Ort: München
4 Beiträge
 
#3

Re: Aktuelles Environment für Dienstemanager bzw. Dienst übe

  Alt 6. Nov 2007, 09:44
Hallo hathor,

Danke für deinen Hinweis!

Wie gesagt in der Registry steht der aktuelle Wert, andere Programme bekommen auch den aktuellen wert
nur die Dienste oder auch der Dienstemanager (?) bekommen nicht den aktuellen PATH.

Ist das so vielleicht gewollt von Windows? Um laufende Dienste nicht einen anderen Pfad unterzumogeln?

Nach Neustart ist alles ok, aber dass will ich ja eben vermeiden!
Kann man evtl. den Dienstemanager bzw. den Prozess der die Dienste startet neu "durchstarten"?


So sieht mein Delphi-Code aus
Delphi-Quellcode:
           
SetSystemWideEnvironmentVariable (eoSystem, 'PATH', 'meinpfad');
SetGlobalEnvironment('PATH', 'meinpfad', false);
Delphi-Quellcode:
 
procedure SetSystemWideEnvironmentVariable (aOwner: tEnviromentOwner; aName, aValue: String);
Var
  dwResult: DWORD;
  Reg: TRegistry;
Begin
  Reg := TRegistry.Create;

  With Reg, cEnviromentOwnerRegPlace [aOwner] Do
    Try
      RootKey := Root;
      OpenKey (Key, False);
      WriteExpandString (aName, aValue);

      SendMessageTimeout (
          HWND_BROADCAST, WM_SETTINGCHANGE,
          0, lParam (pChar ('Environment')),
          SMTO_ABORTIFHUNG, 5000, dwResult
        );
    Finally
      Free
    End;
End;

{*********************************************}
{ Set Global Environment Function             }
{ Coder : Kingron,2002.8.6                    }
{ Bug Report : [email]Kingron@163.net[/email]                }
{ Test OK For Windows 2000 Advance Server     }
{ Parameter:                                  }
{ Name : environment variable name            }
{ Value: environment variable Value           }
{ Ex: SetGlobalEnvironment('MyVar','OK')      }
{*********************************************}

function SetGlobalEnvironment(const Name, Value: string;
  const User: Boolean = True): Boolean;
resourcestring
  REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
  REG_USER_LOCATION = 'Environment';
begin
  with TRegistry.Create do
    try
      if User then { User Environment Variable }
        Result := OpenKey(REG_USER_LOCATION, True)
      else { System Environment Variable }
      begin
        RootKey := HKEY_LOCAL_MACHINE;
        Result := OpenKey(REG_MACHINE_LOCATION, True);
      end;
      if Result then
      begin
        WriteString(Name, Value); { Write Registry for Global Environment }
        { Update Current Process Environment Variable }
        SetEnvironmentVariable(PChar(Name), PChar(Value));
        { Send Message To All Top Window for Refresh }
        SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
      end;
    finally
      Free;
    end;
end; { SetGlobalEnvironment }
  Mit Zitat antworten Zitat
 


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 02:02 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