安装我的.NET程序后,如何设置系统PATH以包含我的程序绝对目录,以便用户可以从控制台中的任何目录启动我的.exe文件?
注意:我希望自动完成此操作,而最终用户无需手动添加PATH。
答案 0 :(得分:4)
我假设您正在使用VS2008内置安装程序而不是InstallShield或Wise或类似的东西(两者都有更好的方法)。
您可以创建一个添加它的安装程序类(见下文)。
然后将安装程序类添加为custom action for install and uninstall,并添加custom actions data所需的路径,例如将TARGETDIR添加到路径...
/ = VARIABLENAME “路径” /值= “[TARGETDIR] \”
using System;
using System.ComponentModel;
namespace Emv
{
[RunInstaller(true)]
public class Installer : System.Configuration.Install.Installer
{
public Installer()
{
}
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
try
{
var varName = this.Context.Parameters["VariableName"];
var valToAdd = this.Context.Parameters["Value"];
var newVal = String.Empty;
var curVal = Environment.GetEnvironmentVariable(varName);
if (curVal != null && curVal.Contains(valToAdd))
{
return;
}
newVal = (curVal == String.Empty) ? valToAdd
: curVal + ";" + valToAdd;
Environment.SetEnvironmentVariable(varName, newVal,
EnvironmentVariableTarget.Machine);
}
catch (Exception ex)
{
// message box to show error
this.Rollback(stateSaver);
}
}
}
}
此代码需要对System.Configuration.Install的引用。
答案 1 :(得分:3)
您可以访问并附加到此注册表位置的当前路径:
HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path
这是在安装程序中更好的更改,而不是在实际应用程序中。
确保追加到注册表值,而不只是设置 ...
答案 2 :(得分:2)
大多数安装程序都允许您附加到系统路径环境变量。查看此功能的文档。
如果您手动安装,可以使用setx.exe(来自资源工具包IIRC)修改路径 - 但要小心,您不希望仅使用应用程序的目录替换现有路径,他说经验:)
或者,我最喜欢的,在脚本中使用WMI:
例如
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objVariable = objWMIService.Get("Win32_Environment").SpawnInstance_
objVariable.Name = "Path"
objVariable.UserName = "System"
objVariable.VariableValue = "c:\myapp"
objVariable.Put_