Как изменить путь среды для проекта установки в Visual Studio - PullRequest
4 голосов
/ 08 декабря 2010

У меня есть проект установки в Visual Studio 2010, который я использую для создания установочного комплекта (MSI). Мне нужно обновить путь к среде, чтобы добавить запись, когда MSI установлен. Есть идеи, как это сделать?

Я не могу найти вариант, который позволяет мне получить доступ к окружающей среде. Единственное, что я могу увидеть, - это напрямую редактировать реестр. Что-нибудь лучше я могу сделать, или это мой единственный вариант?

Спасибо Tony

Ответы [ 2 ]

2 голосов
/ 23 июня 2016

Мне удалось использовать проект установки в Visual Studio (2015) и добавить настраиваемое действие, которое изменило реестр, как показано в этом ответе:

GetEnvironmentVariable () и SetEnvironmentVariable () для переменной PATH

Следующий код предназначен для настраиваемого действия, которое должно применяться к действиям фиксации / установки / и удаления проекта установки:

 [RunInstaller(true)]
public partial class GRInstallCustomAction : System.Configuration.Install.Installer
{
    string environmentKey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
    string pathUrl = "C:\\Program Files (86)\\TargetFolder";
    public GRInstallCustomAction()
    {
        InitializeComponent();
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Commit(IDictionary savedState)
    {
        base.Commit(savedState);

        string environmentVar = Environment.GetEnvironmentVariable("PATH");


        //get non-expanded PATH environment variable            
        string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);


        var index = oldPath.IndexOf(pathUrl);
        if (index < 0)
        {
            //set the path as an an expandable string
            Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath + ";" + pathUrl, RegistryValueKind.ExpandString);
        }

    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Rollback(IDictionary savedState)
    {
        base.Rollback(savedState);


    }

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);

        //get non-expanded PATH environment variable            
        string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

        string removeString = pathUrl + ";";
        var index = oldPath.IndexOf(removeString);
        if (index < 0)
        {
            removeString = pathUrl;
            index = oldPath.IndexOf(removeString);
        }

        if (index > -1)
        {
            oldPath = oldPath.Remove(index, pathUrl.Length);
            //set the path as an an expandable string
            Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath, RegistryValueKind.ExpandString);
        }
    }
}
2 голосов
/ 10 декабря 2010

Проекты установки Visual Studio не могут устанавливать переменные среды.Однако вы можете попробовать использовать пользовательское действие.Вот пример кода VBScript:

Set WshShell = CreateObject("WScript.Shell") 
Set WshEnv = WshShell.Environment("SYSTEM") 
WshEnv("Path") = WshEnv("Path") & ";myPath"

Вы можете скопировать его в файл .VBS и добавить этот файл как пользовательское действие установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...