0

我正在尝试开发一个与 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 方法更好?

问候。

4

1 回答 1

0

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

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

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

于 2013-08-15T19:46:59.220 回答