安装util在错误的文件夹上查找服务

时间:2012-05-01 07:14:48

标签: c# .net service batch-file installutil

3 我正在尝试使用批处理文件安装Windows服务,我们称之为“setup.bat”。在文件中我有以下命令:

"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil" "MyService.exe"

当我执行批处理文件(在windows7上以管理员身份运行)时,我得到了这个:

初始化安装时发生异常: System.IO.FileNotFoundException:无法加载文件或程序集'file:/// C:\ Win dows \ system32 \ MyService.exe'或其依赖项之一。系统不能f ind指定的文件.. 实际服务位于 "SomeRandomLocation\MyService.exe". bat文件是 "SomeRandomLocation\setup.bat"

发生了什么事?如何强制它从我的“setup.bat”文件夹安装?

这应该是动态的。意思是在任何文件夹中!

6 个答案:

答案 0 :(得分:7)

我对安装过程一无所知。但是%~dp0将给出正在运行的批处理文件的绝对路径。因此,如果您的exe文件位于同一文件夹中,您可以尝试:

"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil" "%~dp0MyService.exe"

答案 1 :(得分:2)

为了我自己的用法,我创建了一个小的.bat文件:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" %1

现在,当我想安装服务时,我只需在.bat上拖动.exe文件。完美的作品:)

答案 2 :(得分:1)

如果创建.bat文件,则工作目录基于您调用.bat的位置。如果您创建了.bat文件的快捷方式,则工作目录基于.bat文件的位置。脚本中的任何相对路径都相对于工作目录进行解释。

避免更改所有路径。只需在bat文件的开头发出cd C:\Services

答案 3 :(得分:0)

您是否尝试将工作目录设置为C:\ Services?

答案 4 :(得分:0)

虽然这是一个老问题......

帮助我解决问题的是使用日志运行安装程序

例如:

"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil" "MyService.exe" /LogToConsole /ShowCallStack

在我的情况下,原始错误就像你的

  

FileNotFoundException异常

,但在我发现的日志中

  

抛出:SecurityException

解决方案是以管理员身份运行

答案 5 :(得分:-1)

它适用于我(当然) - 它在包含文件夹中查找MyService.exe "c:\windows\system32"不是installutil的位置,因此可能在批处理文件的早期以某种方式更改工作目录。

假设这不是批处理文件中的唯一命令:
尝试在批处理文件的最开头添加set OLDDIR=%CD%
并在installutil命令之前添加chdir /d %OLDDIR%,看看是否有效。