我们有一个应用程序编写的两C++。净,安装中的所有用户的程序文件夹。这个应用程序下载新版本的本身(作为MSI安装人员)和产卵的新安装的进程来代替本身。

安装过程中作为它的存在的今天:

  1. 复制一个安装管理应用程序(C#.网2.0)的临时目录。这叫'管理'
  2. 经理是执行与提升privs 每个这篇文章.
  3. 原来的应用程序退出。
  4. 管理产生的MSI安装(与高privs,由于复制是提升)
  5. 管理产生的新版本的应用程序。

错误:

新安装应用程序正在运行,在提升的状态。这引起的问题我不一一列举这里。

理想情况下,推出的新安装应用程序,将运行该权限的原来用户。

我不知道如何降级的应用程序后被标准的用户之后的上升。

一个不优雅黑:

(是啊,是啊,这整个过程是不优雅的呢)

  1. 复制的安装管理的临时目录
  2. 运行安装的管理标准的用户privs.让我们叫这个实例'LowlyManager'.
  3. 原来的应用程序退出。
  4. LowlyManager产生的应用程序 再一次, 这次与高privs.让我们来命名这个实例'UpperManagement'
  5. UpperManagement产生物安装者
  6. UpperManagement正常退出,返回的出口码的安装。
  7. LowlyManager解释错误代码从UpperManagement,并产生新安装应用程序。这段时间作为原始调用者。

有没有更好的方式做到这一点?

(我已经留下了一堆的其他细节之前和之后的这些步骤,使该过程更加顺利于用户,但是这应该是足够的了解问题的核心,我想到解决。)

其他要求:

  • 我们不可能安装的每用户应用程序
  • 用户不应该出现一个身份验证对话框如果UAC会只是问"你确定要允许的?"。我认为这可能会杀了一个解决方案使用WindowsImpersonationContext,但我不肯定。
  • 该系统需求的工作XP、Vista和Windows7(即使是有一个单独的进程XP)。
有帮助吗?
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top