【问题标题】:Environment Variables don't get updated环境变量不会更新
【发布时间】:2014-06-13 09:15:13
【问题描述】:

我制作了一个安装程序,Visual Studio SetupProject,它安装了我开发的软件,并检查目标机器上是否安装了某个程序。如果没有,它将启动其原始安装文件。该文件在安装过程中被复制到目标机器,并通过CUSTOM ACTION 启动。

安装一切顺利,但我只有一个问题:

我没有开发的单独安装程序应该在User Environment Variables 后面附加一个PATH,指的是它自己的安装文件夹中BIN 文件夹的路径。它没有!我检查了User Environment VariablesPATH 注册表值,它确实没有得到更新。

但是,当我单独安装程序时,一切顺利!

我尝试将附加安装文件的PackageAs 属性从vsdpaDefault 更改为vsdpaLoose,以使操作可能更“独立”,但它没有改变任何东西。

为什么Environment Variables 没有更新?我的猜测是我的安装程序没有更改这些变量所需的某种权利。

顺便说一句,我使用的是 Visual Studio 2010。

【问题讨论】:

  • “为什么第三方程序没有按照我的预期做”可能最好由客户支持来处理。
  • @Bushmills 正常安装时它会做它应该做的事情。就在我的安装程序调用它的安装时,它没有!
  • 从安装程序启动程序是一种非常糟糕的做法。它使用从 setup.exe 继承的 UAC 提升运行。并且在您的情况下是失败的鲸鱼,它很有可能从 setup.exe 继承环境变量并且不会使用注册表中的环境变量。使用 SysInternals 的进程监视器验证您关于它不写入注册表项的假设。
  • @HansPassant 请看下面的评论。

标签: visual-studio-2010 registry environment-variables setup-project


【解决方案1】:

我相信汉斯有答案。如果您从您的设置中启动该设置作为自定义操作,那么它将使用本地系统帐户运行。这意味着它没有作为当前交互式用户运行,因此它无法更新当前用户的路径,因为它没有作为当前用户运行。

根据定义,此设置不能是基于 MSI 的安装,因为它会失败 - 您不能进行递归 MSI 安装 - 因此它是基于代码的,并且取决于在交互式用户的上下文中运行。

【讨论】:

  • 感谢@PhilDW 和@Hans Passant。你的论点有道理。现在的问题是如何使外部安装程序以当前用户身份运行,或者更好地说,如何使安装程序从我的安装程序自动运行,并且仍然有权更改 HKCU 中的值?汉斯说整件事都是个坏主意。我真的不关注这里。
猜你喜欢
  • 2020-12-14
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2015-02-16
  • 2012-12-10
相关资源
最近更新 更多