我在本地测试时尝试自动安装Windows Service
for。它是内置的.NET
...我通常会打开Visual Studio Command Prompt
asAdministrator
然后输入命令installutil
,我想将其变成“一键式”安装。
因此,我创建了以下批处理脚本,以确保构建了最新版本,然后提升自己执行实际的服务安装(UserAdmin 是我的管理员帐户)。
cd C:\Path\To\Solution
echo Building Service
msbuild WinService.sln /noconlog /nologo
cd C:\Path\To\Solution\bin\Debug
runas /user:UserAdmin "cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil C:\Path\To\Solution\bin\Debug\WinService.exe"
但是,installutil总是给出以下错误:
An exception occurred during the Install phase.
System.Security.SecurityException: The source was not found, but some
or all event logs could not be searched. Inaccessible logs: Security.
我不确定这是配置问题,还是我的批处理脚本错误。但由于我无法在runas
启动命令提示符的 C:\Windows\System32\ 文件夹中创建目录,我怀疑我没有获得我期望的权限。有没有办法检查我在命令提示符中运行的用户/权限级别?
注意:我希望让这个脚本尽可能通用。在我工作的环境中,每个人的管理员帐户都保证是“UserAdmin”。解决方案的路径也将相同。此脚本将添加到 SVN,因此添加我的帐户特定密码之类的操作UserAdmin
是不可接受的。
答案1
这是一个可能对某些人有用的解决方案:
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /username=domain\YourUserName /password=YourPassword YourApplication.exe
答案2
@echo off
SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install
GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause
以管理员身份运行此bat文件
答案3
您可以使用 sc.exe 来创建服务而不是 installutil...
例子:
sc [服务器名称] 创建服务名称 [选项名称=选项值...
这是我经常创建的一个:
sc 创建 syscmd binpath=“%COMSPEC% /c start” 类型= own 类型= interact
这将打开一个命令提示符(具有系统权限)