我有一个C#后台服务。此服务轮询Web服务以获取更新。如果webservice返回更新,则C#服务运行powershell脚本并传递更新所在的url。
然后,此PowerShell脚本获取URL,下载更新(一个简单的.zip文件),提取更新内容,并运行另一个随更新提供的powershell脚本。
这一切都很完美,但有些powershell命令在执行这种方式时什么都不做。例如,我使用jpg图像创建了更新,并让更新附带的powershell脚本将该图像设置为桌面背景。如果我手动执行此更新,它将工作并设置新背景。但是,如果我让C#服务调用powershell脚本,它就不会设置背景,即使我在它仍然没有设置它之后注销也是如此。
另一个似乎不起作用的命令是写入注册表。我在更新中有以下代码:
New-Item -Path HKCU:\Software\ -Name bza -Value "Default Value" –Force
执行此操作时,会在bza
中创建密钥Software
。当C#服务调用脚本时,即使在注销并重新登录后,注册表中也没有任何事情发生。
我认为这有两种可能的解释。它可能是权限不足,或者可能是从后台运行的powershell脚本(没有窗口)无法完成通常能够执行的所有操作。
有人有解决方案吗?
P.S。我们不让C#服务执行这些任务的原因是我们希望将来能够扩展此更新系统,这样我们就可以上传几乎可以执行任何操作的PowerShell脚本。
P.P.S这个运行的设备是我们自己的。我们完全有权以我们想要的任何方式改变它们,关于用户想要什么。
答案 0 :(得分:2)
最可能的原因是该服务以不同的用户或系统用户身份运行。桌面图片在HKEY_CURRENT_USER中设置,因此在正确的用户上下文中运行powershell脚本非常重要。