防止先决条件请求重启,setup.exe安装项目引导程序

时间:2014-03-26 16:46:36

标签: c# .net visual-studio-2010 installation setup-project

有没有办法防止先决条件 - 例如某些可再分发的C ++ - 使用传递给setup.exe文件的某些命令行参数请求重启?我尝试了/NOREBOOT/NORESTART,但他们还没有工作。

修改

导致问题的确切先决条件是:vcredist_2008_x86.exe

4 个答案:

答案 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退出代码并将结果设置为“成功”: enter image description here

答案 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拦截关机/重启消息。

Catch Shutdown event with example code

System Shutdown Functions (AbortSystemShutdown function)