【问题标题】:How can I add items to Windows Shell (rightclick)?如何将项目添加到 Windows Shell(右键单击)?
【发布时间】:2010-01-11 01:14:30
【问题描述】:

我将制作一个将在后台运行的桌面应用程序,这意味着没有可见的窗口,并且我希望在用户右键单击文件时出现一个名为“上传文本”的选项。

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

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

【问题讨论】:

    标签: c# windows shell


    【解决方案1】:

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

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

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

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

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

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

    也就是说,人们已经做到了。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        使用 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 文件夹中删除您的程序和快捷方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-07
          • 2010-10-20
          相关资源
          最近更新 更多