代码之家  ›  专栏  ›  技术社区  ›  Brian Gillespie

.NET 2.0应用程序安装的过程提升

  •  0
  • Brian Gillespie  · 技术社区  · 16 年前

    我们有一个在C++和.NET中编写的应用程序,它为程序文件文件夹中的所有用户安装。这个应用程序下载自己的新版本(作为msi安装程序),并生成新的安装程序进程来替换自己。

    目前的安装过程:

    1. 将Install Manager应用程序(C,.NET 2.0)复制到temp目录。称之为“经理”
    2. 经理以提升的权限执行 per this article .
    3. 原始应用程序退出。
    4. 管理器生成MSI安装程序(具有提升的权限,因为副本已提升)
    5. 管理器生成应用程序的新版本。

    错误:

    新安装的应用程序正在提升状态下运行。这导致了一些我在这里不想列举的问题。

    理想情况下,新安装的应用程序的启动将以原始用户的权限运行。

    我不知道如何在提升后将应用程序降级回标准用户。

    一个不雅的黑客:

    (是的,是的,整个过程都很糟糕)

    1. 将安装管理器复制到临时目录
    2. 使用标准用户权限运行安装管理器。让我们称此实例为“LowlyManager”。
    3. 原始应用程序退出。
    4. LowlyManager生成应用程序 再一次 ,这一次是提升的私人空间。让我们将此实例命名为“uppermanagement”
    5. 上层管理生成安装程序
    6. uppermanagement优雅地退出,返回安装程序的退出代码。
    7. LowlyManager从UpperManagement解释错误代码,并生成新安装的应用程序。这次作为原始调用程序。

    有更好的方法吗?

    (在这些步骤之前和之后,我遗漏了一些其他的细节,这些细节使流程对用户更加顺畅,但这足以理解我要解决的问题的核心。)

    其他要求:

    • 我们无法按用户应用程序安装
    • 如果UAC只是简单地询问“您确定要允许这样做吗?”,则不应向用户显示身份验证对话框。。我认为这可能会扼杀使用WindowsImpersonationContext的解决方案,但我不确定。
    • 系统需要在xp、vista和windows 7上工作(即使xp有单独的进程)。
    1 回复  |  直到 16 年前