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

Posted

技术标签:

【中文标题】在 SharpShell 从上下文菜单启动的程序中继承正确的 app.config【英文标题】:inherit the proper app.config in a program started from context menu by SharpShell 【发布时间】:2013-05-30 03:11:18 【问题描述】:

我正在尝试开发一个与 windows shell 集成的 c# 应用程序,因此我正在使用sharpshell 库。 我在同一个项目中直接使用了sharpshell库,创建了一个专门的类来处理上下文菜单。 最初我将以下命令链接到上下文菜单上的单击事件:

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

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

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

并且 istance 正在工作并正常启动。 问题是使用这种方法启动进程会使程序在windows目录中寻找app.config(主要的currentdomain是explorer.exe进程)。因此,app.config 没有加载,并且 wcf 服务的合同不起作用。

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

问候。

【问题讨论】:

【参考方案1】:

我建议直接使用 Process Start 函数启动进程 - 我认为如果我正确阅读了您的帖子,您实际上是在直接调用程序的“Main”函数,这意味着您实际上并没有创建完全是一个新进程(只需调用 Windows Explorer 进程中的一个函数,这是加载 shell 扩展的内容)。这说明你正在运行的程序是在Windows Shell的进程中运行的,不太友好,好像崩溃了一样可以崩溃资源管理器。

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

作为最后一个选项,对于严肃的 Windows 软件架构,您可以创建一个 Windows 服务来托管某种“协调器”服务。 shell 上下文菜单可以调用协调器服务(说“做某事”),该服务可以启动进程,或者该进程可以在启动时启动并在需要做某事时轮询服务。

【讨论】:

以上是关于在 SharpShell 从上下文菜单启动的程序中继承正确的 app.config的主要内容,如果未能解决你的问题,请参考以下文章

如何从“右键单击”上下文菜单(Windows 资源管理器)中选择多个文件以启动同一个应用程序

我应该使用什么命令来使用Windows注册表从上下文菜单中启动jar文件?

PyQt5:如何从系统托盘图标上下文菜单启动窗口?

文件应用程序中的 Apple FileProvider 扩展从文档浏览器上下文菜单操作中删除复制、重复操作

linux下的gedit命令使用方法与技巧

Blackberry Cascades 上下文菜单从按钮单击