所以我有一个部署服务的MSI。
<ServiceInstall Id='ServiceInstall' ErrorControl='ignore' Type='ownProcess' DisplayName='MetricsReportingService' Description='It does metrics reporting' Name='MetricsReportingService' Start='auto' Account='[SERVICEACCOUNT]' Password='[SERVICEACCOUNTPASSWORD]' />
<ServiceControl Id='MetricsReportingService' Remove='uninstall' Name='MetricsReportingService' Start='install' Stop='both' Wait='yes' />
当我在自己的盒子上部署此服务时,部署工作得很好,但当我在另一个人的机器上部署时,我得到错误1920,服务无法启动。
现在,我在两台计算机上使用完全相同的服务帐户和密码(该帐户在两台计算机上都具有管理员权限)。事实上,我在两台机器上都使用了所有相同的参数,但是在一台机器上它通过了,而在另一台机器上我失败了。
我没有看到任何事件从我的服务中记录,所以它似乎没有进入我的代码。
可能导致这种差异的原因是什么?
答案 0 :(得分:1)
为自定义用户帐户安装服务时,您需要确保该帐户具有启动服务的权限(默认情况下它没有这些权限)。解决方案是使用ntrights.exe作为自定义操作来设置这些权限: http://support.microsoft.com/kb/315276
例如,您可以使用以下命令行:
ntrights.exe -u [SERVICEACCOUNT] +r SeServiceLogonRight
您还可以尝试使用DLL自定义操作,该操作通过自定义代码设置权限。此自定义操作应在安装服务之前运行。
答案 1 :(得分:0)
在我的情况下,我还必须向用户添加用户权限。我是通过自定义操作和this code完成的。它无需在Win8和Server 2008 R2上添加用户权限即可使用。它在Win 7或Win XP上不起作用。希望它有所帮助。