如何阻止其他进程重新启动Windows

本文关键字:重新启动 Windows 进程 其他 何阻止 | 更新日期: 2023-09-27 18:24:43

我有一个Windows安装引导程序setup.exe。它的功能是下载和安装Microsoft必备组件(.NET Framework 3.5、Microsoft Visual Studio Tools for Office Runtime(VSTO)等)。VSTO有问题,因为在某些主机Windows操作系统版本上,它会强制重新启动。这可能会让客户非常沮丧,因为他们没有时间节省工作。因此,我需要停止这种行为。

在C#中,有什么方法可以阻止另一个进程重新启动Windows吗?

我发现唯一有效的方法是p/Invoking ShutdownBlockReasonCreate。但这还不够透明,因为这种方法会阻止特定进程的关闭,而不是导致关闭的进程,所以它很烦人,因为用户会看到一个操作系统关闭屏幕,在该屏幕上显示正在运行的进程列表、阻止关闭的进程以及取消或继续关闭的按钮。我希望能有一种更透明的方式来处理这件事。

编辑:正如另一位Alex提到的,msiexec支持[/norestart][/promptrestart][/forcerestart]。然而,在我的WiX项目中,我不知道如何将命令行参数传递给安装这些先决条件的MSI。我的引导程序setup.exe生成如下:

<Target Name="AfterBuild">
  <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    <BootstrapperFile Include="Microsoft.Net.Framework.3.5.SP1">
      <ProductName>.NET Framework 3.5 SP1</ProductName>
    </BootstrapperFile>
    <BootstrapperFile Include="Microsoft.VSTORuntime.4.0">
      <ProductName>Microsoft Visual Studio 2010 Tools for Office Runtime (x86 and x64)</ProductName>
    </BootstrapperFile>
  </ItemGroup>
  </BootstrapperFile>
  <GenerateBootstrapper ApplicationFile="$(TargetFileName)" ApplicationName="My Application" BootstrapperItems="@(BootstrapperFile)" ComponentsLocation="HomeSite" CopyComponents="False" OutputPath="$(OutputPath)" Path="C:'Program Files (x86)'Microsoft SDKs'Windows'v7.0A'BootStrapper" ApplicationRequiresElevation="True" Culture="en-US" Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' " />
</Target>

以上内容位于我的.wixproj文件中。

如何阻止其他进程重新启动Windows

这似乎是一个ClickOnce部署,而不是WiX引导程序(Burn)应用程序。您发布的xml看起来来自.csproj文件,而不是.wixproj。查看以下链接是否有帮助。

  • 安装Visual Studio 2010 for Office运行时后,VSTO ClickOnce自动重新启动
  • 处理程序包重新启动