为Windows服务设置环境变量

15

我有一个批处理作业,它会启动一个Windows服务。

sc serverName start serviceName

我想在启动服务时设置一个环境变量,类似于您对子进程所做的操作。如何在Windows服务中实现这一点?

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


我的天啊,这是很多标签。你的问题与Java或.NET有什么具体关系? - SomethingDark
目前我有一个批处理作业来启动这个服务,但我也愿意接受使用.NET或Java实现同样功能的解决方案。不过可能包括Java有点误导了,我会将其删除。 - Steve
1
你有没有找到解决办法? - Javier García Manzano
1
@JavierGarcíaManzano 抱歉我没有这样做。最终我没有使用Windows服务来解决我的问题。 - Steve
2个回答

6

我不知道您使用的是哪种语言,但假设您使用的是C#,并且您的类派生自ServiceBase,那么您就有了这个方法:

protected override void OnStart(string[] args)

这段文字是关于IT技术的,它涉及到一个字符串数组中包含参数的问题。因此,在启动您的服务时,请确保在该字符串数组中包含您的参数。

sc serverName start serviceName param1 param2

将会完成工作。

7
顶了一下,因为对于某些人来说这将是正确的答案。但在我的情况下,我不能访问该服务的代码。很抱歉我之前没有明确说明这一点。 - Steve
1
如果您在 .Net 6+ 中使用 Host.CreateDefaultBuilder(args) 并使用参数 --environment YourEnvVariable,这也是有效的。 - drpdrp

3

源自Server Fault 上的这篇回答

向位于 HKLM\SYSTEM\CurrentControlSet\Services\SERVICE_NAME 的服务注册表项的多字符串“环境变量”值添加一个名称-值对,其中名称是您希望该服务具有的环境变量名称,而值则是环境变量的值。

例如,如果您想让您的服务使用不同的 TEMPTMP 环境变量, 你需要将 TEMP=VALUE 输入为一个字符串,并将 TMP=VALUE 输入为另一个字符串

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接