为Windows服务设置环境变量

Ste*_*eve 6 .net windows windows-services batch-file

我有一个启动Windows服务的批处理作业

sc serverName start serviceName
Run Code Online (Sandbox Code Playgroud)

我想在启动服务时为该服务设置一个环境变量,类似于您将其用于子流程的方式。如何使用Windows服务做到这一点?

为了澄清起见,我不想设置任何全局环境变量,而只为该特定进程设置一个。而且我无权访问实际的服务代码。

VWe*_*ber 6

我不知道你使用哪种语言,但假设你使用的是 C# 并且派生自你的类ServiceBase具有该方法

protected override void OnStart(string[] args)
Run Code Online (Sandbox Code Playgroud)

包含字符串数组中的参数。所以开始你的服务

sc serverName start serviceName param1 param2
Run Code Online (Sandbox Code Playgroud)

会做这项工作。

  • 赞成,因为对于某些人来说这将是正确的答案。就我而言,我无权访问该服务的代码。抱歉,我应该明确指出这一点。 (7认同)

Aar*_*sen 3

改编自服务器故障上的这个答案

将多字符串“Environment”值添加到服务的注册表项中的注册表项中HKLM\SYSTEM\CurrentControlSet\Services\SERVICE_NAME。每个字符串值应该是名称=值对,其中名称是您希望服务具有的环境变量名称,值是环境变量的值。

例如,如果您希望您的服务使用不同的TEMP环境TMP变量, 您可以输入 TEMP=VALUE 作为一个字符串,输入 TMP=VALUE 作为另一个字符串

重新启动服务以获取新的环境变量。