3

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”或其依赖项之一。系统找不到指定的文件。实际服务位于 "SomeRandomLocation\MyService.exe". bat文件是 "SomeRandomLocation\setup.bat"

到底是怎么回事?如何强制它从我的“setup.bat”文件夹安装?

这应该动态工作。在任何文件夹中的含义!

4

6 回答 6

7

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

"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil" "%~dp0MyService.exe"
于 2012-05-01T12:20:20.687 回答
2

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

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

现在,当我想安装服务时,我只需将 .exe 文件拖到 .bat 上。完美运行:)

于 2015-06-24T07:28:41.317 回答
1

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

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

于 2012-05-01T07:31:21.597 回答
0

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

于 2012-05-01T07:29:59.360 回答
0

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

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

例如:

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

在我的情况下,原来的错误和你的一样

FileNotFoundException

,但在我发现的日志中

安全异常

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

于 2018-06-14T05:49:44.220 回答
-1

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

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

于 2012-05-01T12:05:43.273 回答