以管理员身份安装 Windows 服务的批处理文件

以管理员身份安装 Windows 服务的批处理文件

我在本地测试时尝试自动安装Windows Servicefor。它是内置的.NET...我通常会打开Visual Studio Command PromptasAdministrator然后输入命令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

这将打开一个命令提示符(具有系统权限)

相关内容