【问题标题】:How to add application folder to %PATH% after installation (VS Setup Project)安装后如何将应用程序文件夹添加到 %PATH%(VS 安装项目)
【发布时间】:2011-02-23 15:31:18
【问题描述】:

我正在寻找一种在安装完成后将应用程序安装文件夹包含到 %PATH% 环境变量中的简单方法。

Visual Studio 2005/2008/2010,安装项目。

谢谢

【问题讨论】:

标签: visual-studio setup-project


【解决方案1】:

很遗憾,但您似乎仍然是正确的,需要为自定义操作编写一个类。示例实现已经消失。请参阅下面的替代方法。

【讨论】:

  • 谢谢,我为这个问题找到了类似的解决方案。
  • 您的解决方案是否在卸载时删除路径?似乎在卸载时没有通过 IDictionary 传递所需的信息。当我将输出从安装到卸载时,我的单元测试有效。但是使用真正的安装程序失败了。
  • 感谢您的解决方案。缺少的是向系统广播环境变化devio.wordpress.com/2011/04/06/…
  • @devio:环境更改永久存储在 Windows 注册表中。新的 PATH 将在重新启动后可用。我不知道用新 PATH 更新现有会话的方法。 “广播到系统”还有什么意思。
  • 广播将通知所有应用程序系统更改。已运行的 cmd 不受影响,但新的新 cmd 将具有新的 PATH 设置。见support.microsoft.com/kb/104011
【解决方案2】:

这是一个老问题,但在谷歌搜索结果中仍然排名很高。

已接受答案中的链接现已损坏。

但是,您可以在此处找到仍然有准确答案的重复问题(稍后提出): GetEnvironmentVariable() and SetEnvironmentVariable() for PATH Variable

我将此问题标记为重复,但在此问题关闭之前,以下代码对我有用:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
//get non-expanded PATH environment variable            
string oldPath = (string)Registry.LocalMachine.CreateSubKey(keyName).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
//set the path as an an expandable string
Registry.LocalMachine.CreateSubKey(keyName).SetValue("Path", oldPath + ";%MYDIR%",    RegistryValueKind.ExpandString);

我将 %MYDIR% 替换为应用程序路径。

此外,您需要进行自定义操作来容纳此代码并将代码放置在提交函数中。

【讨论】:

    【解决方案3】:

    主要问题是 Visual Studio 设置不支持可以使用 PATH 和其他环境变量完成所有这些操作的 Windows Installer 环境表。 MSI 的环境表并不复杂,因此值得使用 MSI 编辑器(例如 Orca)来学习如何使用它,然后使用脚本(例如 WiRunSql.vbs 在Windows SDK)来自动更新。

    或者,学习足够多的 WiX 以创建一个包含您的设置所需的环境变量的合并模块,并将其添加到您的 Visual Studio 设置中。

    这些选择中的任何一个都比编写运行时代码要好,因为运行时代码需要小心不要破坏环境变量,并且不能在每个人安装中使用用户变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多