2010-12-01 61 views
0

如何通过在.net中知道其名称来找到另一个exe的路径?C#如何注册EXE?

我会向OS环境变量添加名称吗? 其他应用程序是否必须在其他地方“注册”自己?

我需要应用程序A启动应用程序B并调用一些WCF服务。

谢谢!

+1

你不能把B的路径放在应用程序A的配置设置中吗? – Amy 2010-12-01 01:36:14

+0

这会工作,会有一个更清洁的解决方案?更清晰的意思是,如果应用程序B的位置发生更改,则不需要更改应用程序A.感谢您的评论。 – dnndeveloper 2010-12-01 01:44:53

+0

将路径置于配置设置中将无需在应用程序B移动时修改应用程序A.您只需修改ApplicationA.exe.config文件即可。不需要重新编译。 – 2010-12-01 01:50:47

回答

3

要回答你的问题:只需知道名字就无法知道路径。一个exe可以驻留在文件系统的任何地方。可能有多个不知道彼此的实例。完全不同的多个exe文件可以具有相同的名称。

你可以采取几种方法之一克服这个,这取决于你正在靶向的exe:

  • 得到了用户使用正常的文件浏览对话框
  • 搜索文件,浏览的exe系统
  • 看到什么痕迹目标EXE离开系统(文件系统,注册表,环境变量等)上,并利用这些痕迹找到EXE

对于两个中f这些选项可以保存结果,以便下次运行应用程序时不必再次执行它。

搜索文件系统可能需要一些时间,您不能保证找到exe(取决于您的应用程序运行的用户级别),并且您可能会得到误报,尤其是如果应用程序被称为愚蠢像设置.exe

让用户在第一次运行时找到exe文件可能是最可靠的找到它的方法,但是如果应用程序运行但目标exe文件不再位于指定位置,则必须决定如何处理,或者用户选择了错误的exe。

如果您对应用程序B(即它是您的产品)有一定的控制权,那么您可以考虑在安装应用程序B时向注册表中的已知位置添加一些信息,以便应用程序A可以轻松找到它。您仍然需要制定计划B,以防万一信息丢失。

0

在配置设置中引用一个exe文件快捷方式的路径,这样,如果exe文件在快捷方式中移动,仍然是最新的。尝试一下,制作一个exe的快捷方式,然后剪切并粘贴到其他地方的exe,然后双击快捷方式,你会看到它指向exe的新位置,因此不会要求更改应用程序A,如果位置应用程序B更改。

0

真的,只需将App B设置为Windows服务并在需要时启动它。

UPDATE:

另一个建议是创建一个硬链接到APPB的EXE:

mklink /H AppB-link.exe path_to_actual_exe 

或者一个符号链接到整个目录,应用B所在:

mklink /D virtual_directory path_to_actual_directory