command-line - Windows 批处理文件不等待命令完成

标签 command-line windows-installer

我有一个批处理文件,它在启动时就存在(以管理员身份运行)并且不执行其中的命令,但是如果我在命令行中指定它,它运行良好并执行所有命令。

这是其中的内容:

start /wait msiexec /x SetupServices.msi /qn /l* "SetupServices.uninstall.log"

start /wait msiexec /i SetupServices.msi /qn /l* "SetupServices.install.log"

最佳答案

(正确答案)

首先,如果您批量启动 .exe 文件,则使用“call”作为前缀会更安全。
有时这是必要的,以确保批次正在等待完成。

使用“开始”是另一种可能性,但对于这个简单的用例来说不是必需的。

你写道命令没有被执行。所以,很明显,你有另一个问题,而不是“不等待......完成”的问题。
看看你新提供的例子,就是这种情况。在管理员模式下,您必须提供完整路径。使用我下面的小技巧(“%~dp0”,包括已经反斜杠),您仍然可以在批处理文件中使用当前目录。

大多数时候,如果管理员权限出现这样的问题,这是“当前目录”路径的问题。具有管理员权限的批处理文件的使用方式与我们习惯的不同,它不在自己的目录中启动(但主要在 System32 中)。不依赖CD是编写防弹批处理文件的重要事项。

一个很好的示例 batch ,在此处结合其他答案,并解决您的案例中的许多可能问题:

call msiexec /i "%~dp0MySetup.msi" /qb /L*v "%~dp0MySetup.log"
echo Returncode: %ERRORLEVEL%
pause

它正确使用当前目录,并假定安装命令行包括日志文件(仅适用于,如果您在当前目录中有写访问权限,如果没有指定具有写访问权限的日志文件的路径,如“%TEMP%\MySetup.log” .

注意:记住以管理员权限真正启动批处理文件(鼠标右键菜单或之前打开管理员命令 shell :)

关于command-line - Windows 批处理文件不等待命令完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946660/

相关文章:

windows - 防止多次安装

.net - 创建静默安装程序

com - 获取 ASP 中的 Com 对象列表

linux - sed、grep、find、awk、gawk 之间有什么关系,优先选择哪个?

命令行中的 Java NoClassDefFoundError

windows - 为什么 msi 安装程序是使用 Windows 安装程序 xml 创建的,即仅 wix?

linux - 如何从命令行使用 JSON 有效负载进行 HTTP 请求/调用?

c++ - 使用预处理器指令定义命令行选项

sql-server - SQL Server 2008 R2 安装卡住

wix - Installshield 是否遵循 RFC 4122 规范来生成组件 GUID?