Как добавить мою программу в PATH в Windows .NET? - PullRequest
3 голосов
/ 30 мая 2009

После установки моей программы .NET, как настроить системный PATH для включения абсолютного каталога моей программы, чтобы пользователь мог запускать мой .exe из любого каталога в консоли?

Примечание. Я хочу, чтобы это делалось автоматически, и конечному пользователю не нужно вручную добавлять PATH.

Ответы [ 3 ]

4 голосов
/ 30 мая 2009

Я предполагаю, что вы используете встроенный установщик VS2008, а не InstallShield или Wise или что-то в этом роде (у обоих есть намного лучшие способы).

Вы можете создать класс установщика, который добавляет его (см. Ниже).

Затем вы добавляете свой класс установщика как пользовательское действие для установки и удаления и добавляете данные пользовательских действий с нужным вам путем, например, для добавления TARGETDIR в путь. ..

/ VariableName = "Путь" / Value = "[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.

3 голосов
/ 30 мая 2009

Вы можете получить доступ и добавить текущий путь в это место в реестре:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path

Это изменение лучше сделать в вашем установщике, а не в реальном приложении.

Убедитесь, что вы добавляете к значению реестра, а не просто устанавливаете это ...

2 голосов
/ 30 мая 2009

Большинство установщиков позволят вам добавить переменную окружения системного пути. Проверьте документацию для этой функции.

Если вы устанавливаете вручную, вы можете использовать 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_
...