2015-02-07 70 views
0

这是事情。我已经在.NET(C#)中构建了一个控制台应用程序。它运作良好,一切都很好。它是我们网络中人们的内部工具,但可以在世界任何地方(大公司)使用。我想我可以使用MS VisualStudio 2013附带的简单安装/部署向导来生成一个很好的小安装程序。我建立了它,它工作的很好。然而,一旦应用程序安装在目标机器上,我希望它可以在命令行的任何地方使用。要么我需要更新PATH变量或将应用程序安装在PATH位置。后者似乎很危险(把东西放在SYSTEM等等),所以我想知道:部署C#控制台应用程序 - 如何通过“立即发布”设置更新ENV PATH?

如何获取简单的Microsoft部署向导在安装应用程序时更新目标机器上的相应路径?我不想写一些安装程序。我希望会有一些基本的部署选项,让我做这样的一些自定义的东西没有麻烦...

我在想什么?帮帮我?谢谢...

+0

这是不可能的,你将不得不编写一些安装程序。这不难与[此加载项](https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d)它可以让你添加一个键到HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths注册表项,以便它可以从任何地方启动。 – 2015-02-07 02:53:20

+0

感谢汉斯。我下载并安装了扩展。我添加了一个安装项目到我的解决方案。但现在我有点失落。是否有关于如何使用安装项目的教程?即使尝试添加具有缺省值的注册表项(上一子值的键)似乎不可撤消的,所以我需要到退后一步,看看如何使用安装项目的一些文档。有关良好在线文档的任何建议吗? – 2015-02-09 23:07:26

回答

0

只需跟进,回答我的问题---我不得不创建一个自定义安装的步骤,将更新PATH环境变量,使计算机上看到我的新的控制台应用程序从任何CMD窗口。这意味着做2个步骤: 读电流路径(不扩大在每个串的变量),如下所示:

 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); 
     } 

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

相关问题