有没有办法防止先决条件 - 例如某些可再分发的C ++ - 使用传递给setup.exe
文件的某些命令行参数请求重启?我尝试了/NOREBOOT
,/NORESTART
,但他们还没有工作。
修改
导致问题的确切先决条件是:vcredist_2008_x86.exe
答案 0 :(得分:4)
在.Net启动strapper中,如果已执行的进程退出特定代码,则表示需要重新启动,通常不会忽略它,因为它可能会发生严重或重要的更改,直到重新启动才会生效。
首先,您需要检查流程退出的退出代码是什么,转到设置日志(通常位于%temp%\VS####.tmp
上)并查找
Process exited with code ###
对我而言,此过程以3010
代码退出。
之后,您需要修改程序包的product.xml
文件,使设置通过将以下内容添加到ExitCodes
节点来忽略该退出代码:
<ExitCode Value="3010" Result="Success" />
因此,最终的product.xml
文件内容应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="Microsoft Visual C++ 2008 Redistributable Package" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="vcredist_x86.exe" PublicKey="3082010A0282010100A2DB0A8DCFC2C1499BCDAA3A34AD23596BDB6CBE2122B794C8EAAEBFC6D526C232118BBCDA5D2CFB36561E152BAE8F0DDD14A36E284C7F163F41AC8D40B146880DD98194AD9706D05744765CEAF1FC0EE27F74A333CB74E5EFE361A17E03B745FFD53E12D5B0CA5E0DD07BF2B7130DFC606A2885758CB7ADBC85E817B490BEF516B6625DED11DF3AEE215B8BAF8073C345E3958977609BE7AD77C1378D33142F13DB62C9AE1AA94F9867ADD420393071E08D6746E2C61CF40D5074412FE805246A216B49B092C4B239C742A56D5C184AAB8FD78E833E780A47D8A4B28423C3E2F27B66B14A74BD26414B9C6114604E30C882F3D00B707CEE554D77D2085576810203010001" />
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="IsInstalled" Product="{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}" />
</InstallChecks>
<Commands Reboot="None">
<Command PackageFile="vcredist_x86.exe" Arguments="/q">
<InstallConditions>
<BypassIf Property="IsInstalled" Compare="ValueGreaterThan" Value="0" />
</InstallConditions>
<ExitCodes>
<ExitCode Value="3010" Result="Success" />
<DefaultExitCode Result="Success" String="Anunexpectedexitcodewasr" FormatMessageFromSystem="true" />
</ExitCodes>
</Command>
</Commands>
</Product>
如果您使用的是Bootstrapper Manifest Generator
,则只需添加3010
退出代码并将结果设置为“成功”:
答案 1 :(得分:2)
将Visual C ++ 2008可再发行软件包(vcredist_x86.exe,vcredist_x64.exe和vcredist_ia64.exe)的命令行用作
例如,如果将vcredist_x86.exe下载到名为c:\ vc2008redist的文件夹,则命令行将如下所示:
c:\ vc2008redist \ vcredist_x86.exe / q / norestart
上面的示例使用/ norestart开关在设置过程完成后禁止重新启动。 / norestart开关不需要完全重新启动 - 它只是让调用进程控制何时安排重启,如果由于文件在安装过程中正在使用而需要重启。如果使用/ norestart开关运行安装程序,则必须检查安装过程返回的退出代码,并在调用过程中相应地处理它。以下是可能的退出代码:
- 退出代码0表示安装成功,无需重启。
- 退出代码3010表示安装成功,需要重新启动才能完成安装。
- 任何其他退出代码表示安装失败。
来源:http://blogs.msdn.com/b/astebner/archive/2010/10/20/10078468.aspx
答案 2 :(得分:0)
如果用/?运行vcredist exe参数它显示了带有选项的消息框。它以小写形式列出/ norestart,它可能区分大小写。
答案 3 :(得分:0)
如果可执行文件没有提供命令行参数,我不相信你可以直接执行。您始终可以通过c#使用WIN API拦截关机/重启消息。