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

C# 卸载自定义操作不删除注册表项,c#,.net,windows,windows-installer,C#,.net,Windows,Windows Installer,在我的程序中,我在当前用户下创建了一个注册表项。此程序由具有最高权限的任务计划程序(S-1-5-32-545)运行 在卸载自定义操作中,我有删除此密钥的代码 当我以管理员身份运行时,删除密钥的代码起作用 从卸载自定义操作运行时,代码不起作用 我猜在后一种情况下它不起作用的原因是,卸载程序执行时当前用户与本地管理员执行代码时的用户不同 从卸载自定义操作运行时,如何删除此注册表项?如何将卸载自定义操作指向正确的当前用户?我对Windows 10中任务计划程序的使用基本不熟悉。早在Windows 20

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

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

当我以管理员身份运行时,删除密钥的代码起作用

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

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


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

我对Windows 10中任务计划程序的使用基本不熟悉。早在Windows 2000中,我就经常使用它,当时它非常原始,严重缺乏我需要的功能

我只是想给你们补充一些观察结果,如果这不是一个很好的答案,请耐心听我说。如果是这种情况,请更新您的问题,并提供更多详细信息,以便我们能够准确了解您的需求


添加/删除计划任务 我想知道您是如何创建计划任务的您是否直接入侵注册表?您可能应该使用WiX软件包通过命令行创建和删除注册表。这里有一个问题/答案,他们正在处理相同的问题:

您已经知道这一点,但这也是为其他人准备的:

  • 使用计划任务控制台手动创建计划任务。
    • 按住Windows键,轻按R
    • 键入:
      taskschd.msc
      并按Enter键
  • 现在,在计划任务GUI中手动创建任务并对其进行测试
  • 通过WiX包中的创建/删除计划任务。
    • 您可以使用任务设置导出XML,并将其用于。我还没有对此进行测试,但这里有一个示例:
    • 您还可以按如下所示推送具有MSI属性的命令行:

  • 计划任务的存储 计划任务似乎不存储在注册表(HKCU)的用户部分,而是存储在磁盘和注册表(HKLM)的每台计算机部分:这意味着,只要在卸载时删除这些任务,就可以删除计算机上的所有用户您的HKCU注册表项如何输入图片?


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

  • 您可以将应用程序作为Windows服务运行
    • 这是一个开发人员密集的“解决方案”,需要更改代码,但可能是最可靠的——特别是对于业务关键型的东西
    • 见本摘要:
      • Windows服务对于24/7任务更可靠
      • 为“不时”发生的事情(甚至在登录时发生一次)安排任务
      • “总而言之,对于不需要复杂控制的周期性维护类杂务,计划任务通常更好”
    • 服务通常应作为LocalService、LocalSystem和网络服务运行(无GUI),但也可以使用用户凭据运行
    • 。仅供参考和“保管”链接
    • 请在此处查看有关您可以使用的不同服务帐户的信息:
    • 您的应用程序是否向用户提供了实际的GUI?这似乎不再可能(因为Vista):。我问过这是否准确,或者“历史又变了”菲尔·威尔逊(MSI专家)可能会告诉我们——我在那天读了他的一篇关于服务的文章
    • 这里有几个选项。请检查链接。链接文章中还有更多的链接,值得快速阅读
  • 在注册表中注册以在启动/登录时启动

    • 好工具:。如果您真的想找出在启动时运行某些东西的大量方法(通过在注册表中注册),您可以使用Sysinternals工具(这是来自live Sysinternals工具共享的直接下载链接)
    • 该工具通过在注册表中的某个位置注册“”,向您展示了系统启动时可以安排运行的方式<代码>驱动程序,
      服务
      计划任务
      IE
      WinLogon
      ,等等。也许取消选中
      选项菜单中的
      “隐藏”条目
      ,会被相关键的数量(大量恶意软件向量)所困扰
    • 警告:此工具不适用于普通用户。如果你不知道自己在做什么的话,它有足够的绳索来击打你的脚仅限开发者/系统管理员请。奇怪的是,它看起来不像用户配置文件中的启动文件夹列在工具中——我猜它只是一个与基于注册表的启动器相关的工具。我发现的一个屏幕截图:


  • 我们能问一下这个任务实际上在做什么吗?也许有另一种方法可以满足你的需要。我从不使用任务管理器,但我假设有一种方法可以注册每台机器的任务-您对此进行了调查吗?从安装程序可靠地清理每个用户的内容很复杂(使用当前技术)。下面是一些更新。您似乎在说您的代码不起作用,但您没有显示它,并且您没有说明自定义操作的顺序、类型、是否模拟。