如何在Windows .NET中将程序添加到PATH?

时间:2009-05-29 23:11:41

标签: .net installer path

安装我的.NET程序后,如何设置系统PATH以包含我的程序绝对目录,以便用户可以从控制台中的任何目录启动我的.exe文件?

注意:我希望自动完成此操作,而最终用户无需手动添加PATH。

3 个答案:

答案 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_