为所有用户卸载自动运行注册表项

2024-01-31

考虑这种情况:

  • Inno Setup 将名为 XYZ 的程序安装到 Program Files 中,供所有用户访问。
  • 程序 XYZ 中的配置选项允许安装注册表值HKCU\Software\Microsoft\Windows\CurrentVersion\Run基于每个用户,允许用户根据自己的喜好配置应用程序自动启动。
  • 卸载 XYZ 时,如果当前用户以外的任何用户设置了自动运行注册表项,这些注册表项将被遗留下来并在下次登录时导致错误。

问题

  • 从 Inno Setup 中的所有用户帐户中删除适当的注册表值的正确方法是什么?
  • 枚举 HKU 中的配置文件并检查密钥并将其删除是否合适?在 Inno Setup 中这将如何完成?
  • 最后,这样做可能会导致漫游配置文件出现哪些问题?

有问题的程序 XYZ 是用 C# 编写的,可以使用以下代码枚举 HKU,但我想通过 Inno Setup 完全处理卸载,而不必在卸载时调用单独的可执行文件。

private static string GetSIDFromUserName(string userName)
{
    var account = new System.Security.Principal.NTAccount(userName);
    var identifier = (System.Security.Principal.SecurityIdentifier)account.Translate(typeof(System.Security.Principal.SecurityIdentifier));
    var sid = identifier.Value;
    return sid;
}

private static string[] GetAllSystemUsers()
{
    List<string> names = new List<string>();
    SelectQuery query = new SelectQuery("Win32_UserAccount");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    foreach (ManagementObject envVar in searcher.Get())
    {
        names.Add((string)envVar["Name"]);
    }
    return names.ToArray();
}

要从所有用户中删除自动运行条目,请使用:

procedure DeleteAutoRunEntryFromAllUsers(AutoRunValueName: string);
var
  Names: TArrayOfString;
  UserKey: string;
  AutoRunKey: string;
  I: Integer;
begin
  Log('Enumerating user keys');
  RegGetSubkeyNames(HKEY_USERS, '', Names);
  Log(Format('Found %d user keys', [GetArrayLength(Names)]));

  for I := 0 to GetArrayLength(Names)-1 do
  begin
    UserKey := Names[I];
    Log(Format('User %s', [UserKey]));
    AutoRunKey := Format('%s\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', [UserKey]);

    if RegValueExists(HKEY_USERS, AutoRunKey, AutoRunValueName) then
    begin
      Log(Format('Deleting auto-run entry from user %s', [UserKey]));

      if RegDeleteValue(HKEY_USERS, AutoRunKey, AutoRunValueName) then
      begin
        Log(Format('Deleted auto-run entry from user %s', [UserKey]));
      end
        else
      begin
        Log(Format('Failed to delete auto-run entry from user %s', [UserKey]));
      end;
    end;
  end;
end;

不确定漫游配置文件。


您是否考虑过将自动运行条目添加到HKEY_LOCAL_MACHINE,但根据中的设置使应用程序立即退出HKEY_CURRENT_USER(根据用户偏好)?

这样你就可以只卸载一个HKEY_LOCAL_MACHINE价值。设置在HKEY_CURRENT_USER可能会被抛在后面。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为所有用户卸载自动运行注册表项 的相关文章

随机推荐

  • 获取页面上特定类型的所有Web控件

    我一直在思考如何获取页面上的所有控件 然后在此相关问题中对它们执行任务 如何以编程方式搜索 C DropDownList https stackoverflow com questions 869122 how to search thro
  • 为什么我的子域重定向到我的主域?

    所以基本上 我有一个子域 m mydomain com au尽管每次我访问它时 我都会被重定向到www mydomain com au m 例如 如果我尝试去m mydomain com au contact php 我会自动重定向到www
  • Python Bottle - 如何在不关闭服务器的情况下上传媒体文件

    我正在使用来自的答案这个问题 https stackoverflow com questions 14296438 bottle file upload and process并看到评论 raw data file read This is
  • UIImage 调整纵横比填充和裁剪

    我有这个代码 我拍摄了一张尺寸为 2448x3264 的照片 我需要调整大小并调整到左上角的屏幕显示 对不起我的英语谢谢 void imagePickerController UIImagePickerController picker d
  • 如何解决“应用程序在使用 Google Play 服务时遇到问题。请重试。”

    我已经用react native做一个项目大约4个月了 现在使用 react native 0 57 4 它由我正在渲染 修改 开发的地图视图组成 react native maps 0 22 1 突然我现在遇到了这个错误 App is h
  • 如何在 python/django 中 fork 一个进程?

    然而 在 django 的上下文中 这更像是一个 Python 常见问题 现在我在 django 中有这个视图 它必须处理大量数据 通常 服务器 使用代理运行的 nginx 和 django 需要几分钟才能完成此操作 有时服务器会超时 我不
  • adb 无法在 Ubuntu 64 上运行 - 找不到命令

    Update 在做了更多实验之后 我必须完全重新表述我的问题 因为我被终端愚弄了 只是我发出来的时候并没有显示错误信息须藤 adb 如果我 cd 进入 ANDOID SDK platform tools 目录并运行 adb I get co
  • CSS - 如何强制元素达到父元素剩余/可用空间的 100%,而不超出它?

    在我看来 这似乎是一个非常业余的问题 但尽管如此 它仍然是一个令人沮丧的异常情况 这实际上是两部分问题的第二部分 第一部分是一个相当常见的部分 涉及让元素拉伸到其父对象的 100 高度 在我的演示中 我有以下 HTML div DIV 1
  • jQuery UI datepicker:配置键盘快捷键

    我用jQuery UI 日期选择器 http jqueryui com demos datepicker 让用户选择一个日期 它有一些快捷键 以便可以使用键盘进行控制 page up down previous next month ctr
  • 动态库映像不包含x86_64、i386架构

    我正在尝试为 iOS 构建动态库 并结合架构 armv7 armv7s arm64 i386 x86 64 Here is my target s Build Settings 如您所见 我已将 x86 64 和 i386 添加到架构 an
  • 在 iPad 上调试 JavaScript 错误

    有什么方法可以调试在 iPad 上运行的 JavaScript 页面吗 转到此位置 并启用调试控制台 iOS6 调试控制台消失了 使用替代方案使其发挥作用 例如 Firebug Lite 看看这里的相关问题 iOS6 删除了 iPad 的控
  • 不存在的模型类的雄辩关系

    我希望在我的应用程序中拥有许多模型 模块 但其中一些模型 模块将被某些客户删除 现在我有这样的关系 public function people return this gt hasMany People model id 当我跑步时 mo
  • Java 虚拟机和交换空间

    感谢这里的任何专家可以就以下 JVM 和交换空间相关查询提供建议 提前致谢 1 当 JVM Java 堆 永久代或本机堆中发生内存不足时 操作系统将使用交换空间 我对吗 或者交换空间用于本机堆中的内存不足 2 我是否正确 本机堆大小在 JV
  • 在 iOS SDK 中使用短信/彩信发送附件

    在 iOS 7 中 支持通过第三方应用程序在短信中添加附件 我想知道 支持哪些类型的文件作为附件 例如 png pdf 等 我可以通过短信 彩信发送 NSData 吗 例如 dat 格式 这些邮件的收件人是否能够使用 iOS 的 打开方式
  • Qt Webkit Bridge:C++ 访问 JavaScript

    我正在使用 QWebView 并调用 setHtml 来显示一些 HTML JavaScript 页面 我使用 QWebFrame evaluateJavaScript 传递数据更新 方法是向其传递包含对 JavaScript 函数 带参数
  • 从文本文件读取 - 批处理

    我有一个文本文件 a txt 你好世界下午好 我编写了一个批处理脚本来逐行读取该文件的内容 FOR F tokens delims x in a txt DO echo x 我得到的输出为 Hello World 由于分隔符 空格 的默认行
  • 在Python中使用字符串调用函数[重复]

    这个问题在这里已经有答案了 前几天在网上搜索 发现一篇关于python字典的有趣文章 这是关于使用字典中的键来调用函数 在那篇文章中 作者定义了一些函数 然后定义了一个字典 其键与函数名完全相同 然后他可以从用户那里获取输入参数并调用相同的
  • 继承:内部类与内部接口

    在表达关切的同时防止基类暴露 https stackoverflow com questions 52842532 prevent exposure of base classes abstract classes 52843168 528
  • CMYK + CMYK = ? CMYK / 2 =?

    假设CMYK中定义了两种颜色 color1 30 40 50 60 color2 50 60 70 80 如果要打印它们 最终的颜色会有什么值 color new min cyan1 cyan2 100 min magenta1 magen
  • 为所有用户卸载自动运行注册表项

    考虑这种情况 Inno Setup 将名为 XYZ 的程序安装到 Program Files 中 供所有用户访问 程序 XYZ 中的配置选项允许安装注册表值HKCU Software Microsoft Windows CurrentVer