我正在尝试开发一个与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) });系统运行正常并正常启动。问题是,使用这种方法启动进程会使程序员在windows目录中查找app.config (主要的当前域是explorer.exe进程)。正因为如此,app.config没有被加载,到wcf服务的契约也不起作用。
你知道我该怎么处理吗?还是继续使用Process.start方法更好?
致以问候。
发布于 2013-08-16 03:46:59
我建议直接使用进程启动函数启动进程--我想如果我没看错的话,你实际上是在直接调用你的程序的“Main”函数,这意味着你根本不是在创建一个新的进程(只是调用Windows资源管理器进程中的一个函数,shell扩展就是加载到这个进程中的)。这意味着你正在运行的程序是在Windows Shell的进程中运行的,这不是太友好,如果它崩溃了,它可能会崩溃资源管理器。
使用Process start启动程序。如果您需要配置它将如何连接,请考虑将命令行参数(如服务地址)传递给您的程序并手动构建WCF客户端绑定(实际上,您可能会发现,一旦您习惯了以编程方式创建WCF客户端,它们的配置文件方法就会更加冗长且不那么直观!)
作为最后一种选择,对于严肃的Windows软件架构,您可以创建一个Windows服务,该服务托管某种“协调器”服务。外壳上下文菜单可以调用协调器服务(说“做点什么”),服务可以踢开进程,或者进程可以在启动时启动,并在需要执行某些操作时轮询服务。
https://stackoverflow.com/questions/16905700
复制相似问题