首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用重新启动管理器在Inno Setup uninstall中关闭并重新启动explorer.exe?

在Inno Setup卸载过程中使用重新启动管理器关闭并重新启动explorer.exe的方法如下:

  1. 首先,在Inno Setup脚本中添加RestartManagerSupport=True以启用重新启动管理器的支持。
  2. [Code]部分添加以下代码段,用于关闭并重新启动explorer.exe:
代码语言:txt
复制
[Code]
const
  RmShutdownReasonFlagRestart = $100;

function RmShutdownReason(dwReason: DWORD): DWORD;
external 'RmShutdownReason@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Reason: DWORD;
begin
  if CurUninstallStep = usUninstall then
  begin
    // 获取重新启动管理器的关闭原因
    Reason := RmShutdownReason(RmShutdownReasonFlagRestart);

    // 关闭并重新启动explorer.exe
    if Reason <> 0 then
      ShellExec('', 'taskkill.exe', '/f /im explorer.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    ShellExec('', 'explorer.exe', '', '', SW_SHOW, ewNoWait, ErrorCode);
  end;
end;

以上代码中,CurUninstallStepChanged是一个Inno Setup的事件函数,用于在卸载过程中监听当前的卸载步骤。当步骤变为usUninstall时,即开始卸载时,会执行代码中的逻辑。

  1. 在Inno Setup脚本的[Setup]部分添加RestartApplications=yes,以确保重新启动管理器能够关闭并重新启动explorer.exe。

完整的Inno Setup脚本示例:

代码语言:txt
复制
[Setup]
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
RestartApplications=yes

[Code]
const
  RmShutdownReasonFlagRestart = $100;

function RmShutdownReason(dwReason: DWORD): DWORD;
external 'RmShutdownReason@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  Reason: DWORD;
begin
  if CurUninstallStep = usUninstall then
  begin
    // 获取重新启动管理器的关闭原因
    Reason := RmShutdownReason(RmShutdownReasonFlagRestart);

    // 关闭并重新启动explorer.exe
    if Reason <> 0 then
      ShellExec('', 'taskkill.exe', '/f /im explorer.exe', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
    ShellExec('', 'explorer.exe', '', '', SW_SHOW, ewNoWait, ErrorCode);
  end;
end;

这样,在Inno Setup的卸载过程中,重新启动管理器会关闭并重新启动explorer.exe,以确保卸载完成后系统环境的正常运行。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 清除Win7通知区域(Notification Area Icons)的无效图标

    一些程序在运行时会自动在任务栏通知区域(Notification Area Icons)里显示图标。只要在通知区域里呆过,就会被记录下来,即使这个软件已经删除,这个软件图标就会一直呆下去。那么怎么能够彻底删除这些已经失效的程序图标呢? 下面就来看看具体的方法: 点击开始菜单,在搜索框内输入“Regedit”并回车打开注册表编辑器,定位到HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify(为了以防万一,可以先将这部分的注册表内容导出备份:右键点击TrayNotify项,选择“导出”即可),接着删除下面“IconStreams”和“PastIconsStream”这两个键值,按F5刷新后退出注册表编辑器。修改后可以重新启动计算机或者同时按下“Ctrl+Shift+Esc”调出任务管理器,结束“explorer.exe”进程,稍等片刻再点击任务管理器上的“文件/新建任务”,输入“explorer”并确定,任务栏便会重新出现,且通知区域内那些失效的程序图标就会不见了。

    02
    领券