在Windows 7上安装C# Windows服务

7
我有一个批处理文件,一直用来安装我的C# Windows服务,直到Windows 7出现问题。我尝试以管理员权限运行批处理文件,也尝试以管理员权限运行命令提示符,导航到Windows服务EXE并在那里运行InstallUtil,但仍然无法工作。
阅读了一些其他建议后,我尝试将我的文件从/bin文件夹中移出,并从其他位置运行它们,但这也没有起作用。
批处理文件的内容如下:
@ECHO OFF

REM The following directory is for .NET 2.0
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Installing IEPPAMS Win Service...
echo ---------------------------------------------------
InstallUtil /i IEPPAMS_WinService1.exe
echo ---------------------------------------------------
echo Done.

我有一个安装日志文件,我将信息倾倒到其中。如果我只是双击.bat文件,我会得到以下结果:
运行事务安装。 开始安装阶段。请参阅日志文件的内容,了解位于C:\ Users \ Justin \ Desktop \ service test \ IEPPAMS_WinService1.exe程序集进度的详细信息。该文件位于C:\ Users \ Justin \ Desktop \ service test \ IEPPAMS_WinService1.InstallLog。
安装阶段发生异常。System.InvalidOperationException:无法在计算机“。”上打开服务控制管理器。此操作可能需要其他特权。内部异常System.ComponentModel.Win32Exception引发以下错误消息:拒绝访问。
回滚安装正在开始。请参阅日志文件的内容,了解位于C:\ Users \ Justin \ Desktop \ service test \ IEPPAMS_WinService1.exe程序集进度的详细信息。该文件位于C:\ Users \ Justin \ Desktop \ service test \ IEPPAMS_WinService1.InstallLog。
回滚阶段成功完成。
事务安装已完成。
当我以管理员权限运行.bat文件时,没有任何内容写入日志文件,服务仍未安装。
有什么想法吗?在Windows 7中安装服务的方法是否有所改变?
3个回答

11

右键点击批处理文件,并以管理员身份运行。

您很可能会遇到Windows Vista和Windows 7的新安全模型(用户帐户控制)造成的问题。 即使您以具有管理员权限的帐户运行,仍需要提升权限才能执行某些(大多数)管理活动。(是的,可以禁用此功能,但请勿这样做)

编辑... 正确的命令行是 InstallUtil YourApp.exe/i 不是 InstallUtil 的有效开关。


1
顺便问一句,你有没有试着查看那个日志文件? - Matthew Whited
是的,就像我所描述的那样,我尝试右键单击批处理文件并以管理员身份运行,我还尝试以管理员身份运行命令提示符,但都没有成功。在使用管理员设置时,并没有将任何内容写入日志文件,但该服务未安装。当我不使用管理员设置时,日志文件包含我上面粘贴的信息。 - Justin C
是的,这个名字很独特。这段代码在Windows XP和Windows Server 2003上安装没有问题。这让我想同意它是权限问题,但我做的一切都不起作用。我读过一个留言板,谈到了64位InstallUtil在应该运行32位时出现了问题。我在32位机器上,所以这可能与它有关。 - Justin C
/i 可能是 /InstallStateDir 的快捷方式,它可能会因为寻找名为 IEPPAMS_WinService1.exe 的目录而混淆。将来可以使用 /ShowCallStack 命令来帮助查找问题真正发生的位置。 - Matthew Whited
谢谢Matthew,你提供的所有好主意。我最终找到了一个可行的解决方案。虽然我还没有完全理解为什么,但是你最后的评论让我有了一些启示。我已经自己发布了答案。 - Justin C
显示剩余5条评论

8

我通过在命令行中输入InstallUtil的完整路径来解决了问题,然后它就可以工作了。因此,在导航到包含我的EXE的文件夹之后,我输入了以下内容:

C:\Windows\Microsoft.NET\Framework\v4.0.21006\installutil.exe IEPPAMS_WinService1.exe

不确定为什么在Windows 7中我现在必须这样做,而在XP中从未这样做过,但没关系。感谢所有的建议!


1
我想做你在这里做的同样的事情。我注意到你在这里的“修复”中使用了你的.NET 4.0目录中的installutil.exe。在你最初的问题中,你使用的是.NET 2.0进行安装。(设置DOTNETFX2 =%SystemRoot%\ Microsoft.NET \ Framework \ v2.0.50727) - Jeff Reddy
很好的观点。我感觉在处理问题时,我曾尝试使用.NET 4.0,但那并没有解决问题。然后当我使用完整路径时,它确实起作用了。我没有回去尝试2.0中的完整路径,而这是几个月前的事情,所以我的记忆可能有误。 - Justin C
@BillBingham 很高兴它有帮助。我至少因此浪费了一天的时间。 - Justin C
@JustinC 我也遇到了同样的问题。我尝试了所有论坛上看到的方法,包括提供完整路径。有什么建议吗? - CSharpDev
嗨,我有同样的问题。我运行了这个命令:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe E:\DataService\DataSrvice.exe 它正常工作。 - Eqbal Sohrabi
显示剩余2条评论

3
当我以管理员权限运行.bat文件时,日志文件中没有任何内容,并且服务仍未安装。
首先,您必须以管理员权限运行。
其次,当您“以管理员身份运行”时,它实际上将目录更改为c:\windows\system32作为初始目录(不知道为什么),这可能解释了为什么以管理员身份运行不会产生日志文件。请手动更改到IEPPAMS_WinService1.exe所在的路径作为脚本开始的位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接