繁体   English   中英

在SharpShell从上下文菜单启动的程序中继承适当的app.config

[英]inherit the proper app.config in a program started from context menu by SharpShell

我正在尝试开发与Windows Shell集成的C#应用​​程序,因此我正在使用Sharpshell库。 我直接在同一项目中使用Sharpshell库,创建用于处理上下文菜单的专用类。 我最初将以下命令链接到上下文菜单上的click事件:

System.Diagnostics.Process.Start(path, _command.ToString() + "|" + string.Join("|", SelectedItemPaths));

并且系统正在运行。 现在,我尝试直接从Click事件开始,使用以下代码从Program.Main类的新位置开始:

            DmsDrive.Program.Main(new string[] { _command.ToString() + "|" + string.Join("|", SelectedItemPaths) });

并且该距离正在运行并正常启动。 问题是使用此方法启动进程会使程序在Windows目录中查找app.config(主要currentdomain是explorer.exe进程)。 因此,未加载app.config,并且wcf服务的合同无效。

你知道我该怎么处理吗? 还是我继续使用Process.start方法更好?

问候。

我建议您直接使用Process Start函数启动过程-我认为,如果我正确阅读了您的帖子,实际上是在直接调用程序的“ Main”函数,这意味着您实际上并没有在创建新的过程根本(只需在Windows资源管理器进程中调用外壳扩展加载到的函数)。 这意味着您正在运行的程序正在Windows Shell进程中运行,该进程不太友好,就好像它崩溃了一样,它也可能使资源管理器崩溃。

使用Process start启动程序。 如果您需要配置它的连接方式,请考虑将命令行参数传递给程序(例如服务地址)并手动构建WCF客户端绑定(实际上,一旦习惯了创建WCF客户端,您可能会发现以编程方式,它们的配置文件方法比较冗长,不太直观!)

作为最后的选择,对于严重的Windows软件体系结构来说,您可以创建一个承载某种“协调器”服务的Windows服务。 Shell上下文菜单可以调用协调程序服务(说“做某事”),并且该服务可以启动流程,或者该流程可以在启动时启动并轮询服务(如果需要执行某些操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM