我是新手 .Net 2.0 和 3.5 开发人员。我想创建一个在 Vista 中右键单击文件时创建上下文菜单的应用程序。右键单击后——我想我可以弄清楚其余的,但我不知道访问 Vista API 的技术。
跟进:
当我一直在阅读人们回应的一些信息时,我发现我在这里使用 shell 扩展有点矫枉过正。如果我只是调用我的应用程序并将文件名作为参数传递,我想我可以让这个项目变得更简单。当右键单击具有某些扩展名的文件时,这仍然需要我的应用程序出现在资源管理器的上下文菜单中。我该怎么做呢?
我是新手 .Net 2.0 和 3.5 开发人员。我想创建一个在 Vista 中右键单击文件时创建上下文菜单的应用程序。右键单击后——我想我可以弄清楚其余的,但我不知道访问 Vista API 的技术。
跟进:
当我一直在阅读人们回应的一些信息时,我发现我在这里使用 shell 扩展有点矫枉过正。如果我只是调用我的应用程序并将文件名作为参数传递,我想我可以让这个项目变得更简单。当右键单击具有某些扩展名的文件时,这仍然需要我的应用程序出现在资源管理器的上下文菜单中。我该怎么做呢?
由于听起来无济于事,我建议不要在 .Net 2.0 或 3.5 中这样做。正如布赖恩所说,您要实现的东西是外壳扩展。这些实现为 Vista shell 加载的库。
虽然网络上有几个教程给出了在 .Net 2.0 中实现这些的说明,但其中很少有人提到这是多么糟糕的主意。如果你让 Vista shell 加载一个 .Net shell 扩展,它会被迫加载你的 shell 扩展需要的整个 .Net CLR。更糟糕的是,您只能在一个进程中加载完整的 .Net CLR 的一个版本。因此,如果您有一个需要 .Net 1.0 CLR 的 shell 扩展并且 Vista 已经加载了它,它就无法加载您的 shell 扩展所需的 2.0 CLR。
Also there are some Stack Overflow articles already discussing this.
Some information on implementing a shell extension in unmanaged C++ (KBCafe PDF, couldn't find a simple html link)
您尝试编写的东西称为“shell 扩展”。我从来没有写过,所以我不能给你一个简单的例子,但现在你知道它叫什么,你可能可以通过在谷歌上搜索教程来取得更大的进步。
我相当肯定您不允许在任何版本的 Windows 中使用托管代码为资源管理器编写 shell 扩展。所以如果你想写一个,你需要用一种“传统”的语言来写,比如 C++。
您需要一个Context Menu Shell Extension,现在要记住的一件事是您不允许在 .net 中编写它们(旧的新事物博客)。
您可以尝试编写进程外扩展(骨架是非托管的,它通过 IPC 调用托管服务)但我没有看到有人这样做。