如何将项目添加到Windows Shell(右键单击)?

时间:2010-01-11 01:14:30

标签: c# windows shell

我要创建一个将在后台运行的桌面应用程序,这意味着没有可见的窗口,我想要一个名为“上传文本”的选项,以便在用户右键单击文件时显示。

有人能指出我正确的方向吗?我还必须确保如果有人想在任何时候卸载程序,那么shell修改也会干净地消除。

该应用程序将运行Windows XP,Windows Vista和Windows 7.这些操作系统在处理我的shell难题方面有何不同?

3 个答案:

答案 0 :(得分:4)

这是一个shell扩展。您已使用C#标记标记了此问题;你应该知道writing shell extensions in a managed language is strongly discouraged

  

不幸的是,非托管C ++确实如此   去这里的唯一途径。

     

编写进程内shell扩展   在托管代码中实际上非常   因为它有危险的事情要做   注入您的托管的效果   代码(和.NET Framework)   机器上的每个应用程序   有一个文件打开对话框。

     

出现问题的原因只有一个   .NET Framework的版本可以   在任何给定时间加载进程   (其他共享组件,如java   和msxml具有相同的属性和   因此同样的限制)。

     

如果你编写shell扩展名   使用2.0 .NET Framework和   使用1.1 .NET构建的应用程序   Framework使用文件打开对话框,   你的shell扩展会失败,因为   它无法在早期版本上运行。   如果你的事情变得更糟   shell-extension设法加载   在另一个过程中   应用程序托管代码:你的   延期可能迫使现有的   应用程序到不同的运行时   版本比预期的版本   并导致它失败。

     

由于这些问题,我们强烈反对   建议不要使用任何   每个进程的单实例运行时或   库(例如.NET Framework,   进程内shell中的java或msxml)   扩展

尽管如此,人们已经做到了。

这是a guide to creating shell extensions, using C++

答案 1 :(得分:1)

您可以将您的应用添加到SendTo文件夹。

答案 2 :(得分:0)

使用SendTo的独立程序怎么样?

将exe安装到“Program Files \ mycompany \ myprogram”,并将exe的快捷方式安装到SendTo文件夹中。然后,当用户右键单击文件,选择SendTo,然后选择您的程序时,您的exe将由Windows执行,文件名的完整路径将通过argv [1]传递。如果他们选择n个文件,他们将在argv [1] .. argv [n]。

如果您希望程序不可见,请不要显示默认表单。您可以选择在托盘中放置一个图标,以便用户双击它以查看上载进度。当argv [1]的上传完成后,处理argv [2] ... argv [n]如果它们存在并退出。要彻底卸载,请从SendTo文件夹中删除程序和快捷方式。