如何阻止其他进程重新启动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文件中。
这似乎是一个ClickOnce部署,而不是WiX引导程序(Burn)应用程序。您发布的xml看起来来自.csproj
文件,而不是.wixproj
。查看以下链接是否有帮助。
- 安装Visual Studio 2010 for Office运行时后,VSTO ClickOnce自动重新启动
- 处理程序包重新启动