
Ich habe ein Programm, das als Windows 7-Dienst ausgeführt wird. Im Programm wird die Umgebungsvariable HOMEPATH verwendet, um den Speicherort einer Datei festzulegen. Wenn das Programm einfach über eine Befehlszeile ausgeführt wird, wird HOMEPATH normalerweise dem Home-Verzeichnis des angemeldeten Benutzers zugeordnet. Dies ist jedoch bei einem Windows-Dienst nicht der Fall.
Wenn also ein Programm als Dienst ausgeführt wird und Sie die Umgebungsvariable HOMEPATH verwenden, wohin wird diese dann zugeordnet?
Antwort1
Dienste werden normalerweise unter einem von drei Dienstkonten ausgeführt Local Service
Local System
. Network Service
Für alle ist die Variable HOMEPATHNull.
Zu untersuchen
Für Ihr spezielles Szenario könnten Sie den Dienst einen Ereignisprotokolleintrag schreiben lassen und ausdrucken lassen, was er in der Variable HOMEPATH speichert. In C# könnten Sie Folgendes verwenden:
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("The HomePath for this service is '" + Environment.GetEnvironmentVariable("HOMEPATH") + "'", EventLogEntryType.Information);
}
Mögliche Lösungen
Sie können im Eigenschaftenfenster des Dienstes oder in der Installationskonfiguration des Dienstes festlegen, welches Konto ein Dienst verwendet (z. B. Ihr Benutzerkonto). Als ich es mit meinem Benutzerkonto getestet habe, wurde im Ereignisprotokolleintrag Folgendes angezeigt The HomePath for this service is '\Users\Admin-PC'
:
. .