卸载自定义操作不删除注册表项

时间:2018-01-11 21:43:36

标签: c# .net windows windows-installer

在我的程序中,我在当前用户下创建了一个注册表项。该程序由具有最高权限的任务计划程序运行(S-1-5-32-545)。

在我的卸载自定义操作中,我有代码删除此密钥。

当我以管理员身份运行时,删除密钥的代码有效。

从卸载自定义操作运行时,代码不起作用。

我猜测它在后一种情况下不起作用的原因是因为当执行卸载程序时当前用户与本地管理员执行代码时不同。

如何从卸载自定义操作运行时删除此注册表项?如何将卸载自定义操作指向正确的当前用户?

1 个答案:

答案 0 :(得分:1)

我基本上不熟悉Windows 10中任务调度程序的使用。我在Windows 2000中使用了很多东西,然后它非常原始 - 严重缺乏我需要的功能。

我会尝试为你添加一些观察结果,如果它不是一个答案,请耐心等待。如果是这种情况,请更新您的问题并提供更多详细信息 - 以便我们准确了解您的需求。

添加/删除计划任务

我想知道你是如何创建计划任务的? 您是否直接攻击注册表?您应该使用schtasks.exe通过WiX软件包的命令行创建和删除它。以下是他们处理相同问题的一个问题/答案: WIX Create Scheduled Task

你已经知道了这一点,但这也适用于其他人:

  1. 使用计划任务控制台手动创建计划任务。
    • 按住 Windows键,点按 R
    • 输入:taskschd.msc并按 Enter
  2. 现在在计划任务GUI中手动创建任务并进行测试。
  3. 通过WiX包中的schtasks.exe,使用Quiet Execution Custom Action创建/删除计划任务。
  4. 计划任务的存储

    似乎计划任务不存储在注册表(HKCU)的用户部分中,而是存储在磁盘上和注册表(HKLM)的每机器部分中:Where does Windows store the settings for Scheduled Tasks console?这应该意味着他们是只需在卸载时删除它们,即可删除计算机上所有用户。 您的HKCU注册表项如何进入图片? Here is the MSDN page on Schtasks.exe

    计划任务的替代方案

    仅作为记录,有一些替代方案可以将您的应用程序作为计划任务运行,这可能比计划任务更好或更容易:

    1. 您可以将应用程序作为Windows服务运行
      • 这是一个需要更改代码的开发人员“解决方案”,但可能是最可靠的 - 特别是对于关键业务的东西。
      • 查看摘要:When should I use a scheduled task instead of a Windows Service?
        • Windows服务对于24/7任务更可靠。
        • 计划任务“不时发生”(甚至登录时)。
        • 总之,对于不需要复杂控制的定期维护类型杂务,计划任务通常更好”。
      • 服务通常应该作为LocalService,LocalSystem,Network Service运行 - 没有GUI - 但也可以使用用户凭据运行。
      • Windows Services Frequently Asked Questions (FAQ)。仅供参考和“保管”链接。
      • 请参阅此处可以使用的有关不同服务帐户的一些信息: The difference between the 'Local System' account and the 'Network Service' account?
      • 您的应用程序是否向用户提供了实际的GUI?似乎这已经不可能了(因为Vista): interactive services 。我问过这是否准确,或者“历史是否再次改变”。 Phil Wilson (MSI专家)可能会告诉我们 - 我在当天读了一篇关于他服务的文章。
    2. You can use the startup folder for allusers as suggested here
      • 这里有几种选择。请检查链接。链接文章中还有其他链接值得快速阅读。
    3. 在注册表中注册以在启动/登录时启动

      • 好工具autoruns64.exe。如果你真的想弄明白多种方法在启动时运行(通过在注册表中注册),你可以使用Sysinternals工具autoruns64.exe(这是一个直接下载链接)来自实时sysinternals工具共享,here is the Microsoft page)。
      • 此工具通过注册“在注册表中的某个地方”,确实显示了系统启动时可以安排运行的方式。 Driversservicesscheduled tasksIEWinLogon等等。也许取消选中"Hide" entries中的Options menu,使其真正被相关密钥的数量(恶意软件向量堆)所困扰。
      • 警告:此工具不适用于普通用户。如果你不知道你在禁用什么,它就拥有你需要用脚射击自己所需的所有绳索。 仅限开发人员/系统管理员。奇怪的是,它看起来并不像工具中列出了用户配置文件中的启动文件夹 - 我想它只是一个与基于注册表的启动器有关的工具。我发现的截图:

      • enter image description here

相关问题