Windows 服务 - 安装服务时出现 UnauthorizedAccessException 错误 (C#)
Windows Service - UnauthorizedAccessException Error when Installing Service (C#)
因此,我在 Visual Studio 2017 年尝试使用 C# 创建服务,但在尝试安装它时我一直收到错误消息。
现在,我的服务中甚至没有任何东西,我只想能够安装该服务。我在 Visual Studio 2017 年使用 Visual C# > Windows 桌面下的 Windows 服务 (.NET Framework) 模板创建了一个新项目。然后我通过右键单击 > 添加安装程序添加了安装程序。对于 serviceProcessInstaller1,我将帐户设置为 LocalSystem。然后...就是这样!
现在,我尝试安装它。我打开命令提示符(运行 作为管理员)然后我
InstallUtil ServiceTest.exe
事情一开始很顺利,但后来我收到一条消息:
"An exception occured during the Install phase.
System.UnauthorizedAccessException: Attempted to perform an
unauthorized operation."
什么可能会生成此消息?
我用谷歌搜索并尝试了以下操作:
- 确保我 运行 命令提示符为管理员。
- 将完全控制分配给
项目文件夹到我的管理员帐户。
- 将权限配置为完全
在 regedit 的安全日志中控制 admin 帐户。
- 登录我的
计算机作为管理员(而不是普通用户)和 运行 它
那样。
尽管如此,我还是不断收到同样的错误。我还能做错什么?非常感谢您的建议!
注意:我正在尝试在我的计算机上本地安装此服务。
编辑:根据请求,这里是日志。顺便说一句,我将我的项目命名为 "FailedService",因为我无法让它工作!
InstallUtil.InstallLog
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe assembly's progress.
The file is located at C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog.
An exception occurred during the Install phase.
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
The Rollback phase of the installation is beginning.
See the contents of the log file for the C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe assembly's progress.
The file is located at C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog.
The Rollback phase completed successfully.
The transacted install has completed.
FailedService.InstallLog
Installing assembly 'C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog
assemblypath = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe
Installing service Service1...
Creating EventLog source Service1 in log Application...
Rolling back assembly 'C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog
assemblypath = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe
Restoring event log to previous state for source Service1.
在提升的提示中输入 installUtil 和您的服务二进制文件的完整路径,这样就可以了。
我终于解决了这个问题。通过使用 SysInternal 的 Process Monitor,我能够深入了解它。我打开程序并让它记录 InstallUtil.exe 的日志。从那里开始,我开始搜索任何显示 "Access Denied" 的日志。当我整理它们时,我注意到一些有趣的事情:它试图创建一个注册表项,但它一直失败!
所以我进入注册表并创建了一个名为 "ServiceTest" 的键。之后,我再次 运行 InstallUtil 命令,它成功了!
如果其他人遇到问题,解决方案是在以下位置创建一个以您的进程名称命名的密钥:
HKLM\System\CurrentControlSet\Services\EventLog\Application\
因此,我在 Visual Studio 2017 年尝试使用 C# 创建服务,但在尝试安装它时我一直收到错误消息。
现在,我的服务中甚至没有任何东西,我只想能够安装该服务。我在 Visual Studio 2017 年使用 Visual C# > Windows 桌面下的 Windows 服务 (.NET Framework) 模板创建了一个新项目。然后我通过右键单击 > 添加安装程序添加了安装程序。对于 serviceProcessInstaller1,我将帐户设置为 LocalSystem。然后...就是这样!
现在,我尝试安装它。我打开命令提示符(运行 作为管理员)然后我
InstallUtil ServiceTest.exe
事情一开始很顺利,但后来我收到一条消息:
"An exception occured during the Install phase. System.UnauthorizedAccessException: Attempted to perform an unauthorized operation."
什么可能会生成此消息?
我用谷歌搜索并尝试了以下操作:
- 确保我 运行 命令提示符为管理员。
- 将完全控制分配给 项目文件夹到我的管理员帐户。
- 将权限配置为完全 在 regedit 的安全日志中控制 admin 帐户。
- 登录我的 计算机作为管理员(而不是普通用户)和 运行 它 那样。
尽管如此,我还是不断收到同样的错误。我还能做错什么?非常感谢您的建议!
注意:我正在尝试在我的计算机上本地安装此服务。
编辑:根据请求,这里是日志。顺便说一句,我将我的项目命名为 "FailedService",因为我无法让它工作!
InstallUtil.InstallLog
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe assembly's progress.
The file is located at C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog.
An exception occurred during the Install phase.
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
The Rollback phase of the installation is beginning.
See the contents of the log file for the C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe assembly's progress.
The file is located at C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog.
The Rollback phase completed successfully.
The transacted install has completed.
FailedService.InstallLog
Installing assembly 'C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog
assemblypath = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe
Installing service Service1...
Creating EventLog source Service1 in log Application...
Rolling back assembly 'C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe'.
Affected parameters are:
logtoconsole =
logfile = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.InstallLog
assemblypath = C:\Users\first.m.last\source\repos\FailedService\FailedService\bin\Debug\FailedService.exe
Restoring event log to previous state for source Service1.
在提升的提示中输入 installUtil 和您的服务二进制文件的完整路径,这样就可以了。
我终于解决了这个问题。通过使用 SysInternal 的 Process Monitor,我能够深入了解它。我打开程序并让它记录 InstallUtil.exe 的日志。从那里开始,我开始搜索任何显示 "Access Denied" 的日志。当我整理它们时,我注意到一些有趣的事情:它试图创建一个注册表项,但它一直失败!
所以我进入注册表并创建了一个名为 "ServiceTest" 的键。之后,我再次 运行 InstallUtil 命令,它成功了!
如果其他人遇到问题,解决方案是在以下位置创建一个以您的进程名称命名的密钥:
HKLM\System\CurrentControlSet\Services\EventLog\Application\