Powershell Windows服务环境-我做错了什么?

Powershell Windows服务环境-我做错了什么?,powershell,registry,windows-server-2012,regedit,Powershell,Registry,Windows Server 2012,Regedit,我正在安装自己的Windows服务。它需要自己的环境。我知道没有工具可以处理它,所以我手动编辑注册表 我在PowerShell中编写了服务安装脚本,因此我的第一个想法是: New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\MyService" -Name Environment -Value "EnvVar=value" -PropertyType MultiString 问题是,当注册表中出现该项时,我的服务不使用它,即使在p

我正在安装自己的Windows服务。它需要自己的环境。我知道没有工具可以处理它,所以我手动编辑注册表

我在PowerShell中编写了服务安装脚本,因此我的第一个想法是:

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\services\MyService" -Name Environment -Value "EnvVar=value" -PropertyType MultiString
问题是,当注册表中出现该项时,我的服务不使用它,即使在powercycle之后

通过实验,我发现如果我在regedit中编辑它,它就会工作,并且密钥会被我的服务使用。所以,我把它挂在这里:

Invoke-Expression "reg.exe add ""HKLM\SYSTEM\CurrentControlSet\services\$name"" /v ""Environment"" /d ""EnvVar=value"" /t REG_MULTI_SZ /f"
现在它工作了:D

我使用的
新项目属性
有什么问题?我以管理员的身份做每件事,我对64/32位的问题很感兴趣(我认为它们不适用于这里——我的软件是64位的,windows是64位的,所有东西都是64位的:)


它将该项添加到注册表,但不使用该项,而使用
regedit.exe
reg.exe
添加相同的项可以正常工作。也许我碰到了什么虫子?(操作系统:Windows Server 2012,64位)

hm,您可以尝试使用ProcessMonitor并检查应用程序是否尝试读取keyReg ACL,直到服务本身的级别被设置为止。我检查了您的示例,它们确实创建了相同的子条目。您是否已经尝试恢复更改,并查看PS命令是否可以同时工作?通常情况下,有些变化可能是您不知道的,但却无法重现。这两个命令为我创建了相同的值,所以我不明白为什么一种方法可以工作,而另一种方法不能。您是否启用了UAC(特别是注册表虚拟化)?