部署C#控制台应用程序 - 如何通过“立即发布”设置更新ENV PATH?

时间:2015-02-07 00:49:29

标签: c# deployment visual-studio-2013 console-application

这就是事情。我在.NET(C#)中构建了一个控制台应用程序。它运作良好,一切都很好。它是我们网络上的人们的内部工具,但可以在世界任何地方使用(大公司)。我以为我可以使用MS VisualStudio 2013附带的简单安装/部署向导来生成一个不错的小安装程序。我把它设置好了,效果很好。

但是,一旦将应用程序安装在目标计算机上,我希望它可以在命令行的任何位置使用。要么我需要更新PATH变量,要么将应用程序安装在PATH位置。后者似乎很危险(在SYSTEM等中放置一些东西),所以我想知道:

如何在安装应用程序时使用简单的Microsoft部署向导更新目标计算机上的相应路径?我不想写一些安装程序。我希望有一些基本的部署选项,让我可以毫不费力地做一些这样的自定义事情......

我错过了什么?救命?感谢...

1 个答案:

答案 0 :(得分:0)

只是为了跟进,回答我的问题---我必须创建一个自定义安装步骤,它将更新PATH环境变量,使计算机从任何CMD窗口看到我的新控制台应用程序。这意味着要做两个步骤: 读取当前路径(不扩展每个字符串中的变量),如下所示:

        string RegKeyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
        string pathvariable = (string)Microsoft.Win32.Registry.LocalMachine.OpenSubKey(RegKeyName).GetValue
            ("Path", "", Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames);

然后我用分号拆分pathvariable并将其加载到一个allpaths数组变量中(忽略空条目)。然后,我遍历foreach循环中的所有路径并重建主路径,并设置一个布尔值来告诉我我想要添加的目录是否已经在路径中。然后,一旦我完成了,我做了以下事情:

        if (NeedtoUpdate)
        {
            Environment.SetEnvironmentVariable("Path", MasterPath + MyNewPathEntry + ";", EnvironmentVariableTarget.Machine);
        }

这就是自定义安装步骤对我有用的方式。