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”文件夹安装?
这应该是动态的。意思是在任何文件夹中!
答案 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%
,看看是否有效。