我有一个作为 Windows 7 服务运行的程序。在该程序中,HOMEPATH 环境变量用于设置文件的位置。通常,当程序在命令行中简单运行时,HOMEPATH 将映射到登录用户的主目录。但是,对于 Windows 服务来说情况并非如此。
因此,当程序作为服务运行时,并且您使用 HOMEPATH 环境变量,该变量映射到哪里?
答案1
服务通常在三个服务帐户之一下运行,Local Service
Local System
并且Network Service
。对于所有这些帐户,HOMEPATH 变量都是无效的。
去弄清楚
对于您的特定场景,您可以让服务写入事件日志条目,并打印其存储在 HOMEPATH 变量中的内容。在 C# 中,您可以使用:
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("The HomePath for this service is '" + Environment.GetEnvironmentVariable("HOMEPATH") + "'", EventLogEntryType.Information);
}
可能的解决方案
您可以在服务属性窗口或服务安装配置中设置服务使用的帐户(例如您的用户帐户)。当我使用我的用户帐户进行测试时,事件日志条目显示
The HomePath for this service is '\Users\Admin-PC'
...