https://www.codeproject.com/Articles/512956/NET-Shell- Расширения-Оболочка-Контекст-Меню
Я изменил некоторые очень незначительные вещи, такие как имя класса и имя функции, но большую часть функциональности оставил нетронутой. Он компилируется нормально, и регазм прошел успешно. Но новый пункт меню расширения оболочки не отображается в Windows10 или Windows11. Вот мой окончательный код:
Код: Выделить всё
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Windows.Forms;
using SharpShell.Attributes;
using SharpShell.SharpContextMenu;
namespace AcmeFileSender
{
[ComVisible(true)]
[COMServerAssociation(AssociationType.ClassOfExtension, ".*")]
public class UploadFileExtension : SharpContextMenu
{
protected override bool CanShowMenu()
{
// We always show the menu
return true;
}
protected override ContextMenuStrip CreateMenu()
{
// Create the menu strip
var menu = new ContextMenuStrip();
// Create an 'Upload file' item
var itemCountLines = new ToolStripMenuItem
{
Text = "Upload file"
};
// When we click, we'll count the lines
itemCountLines.Click += (sender, args) => UploadFiles();
// Add the item to the context menu.
menu.Items.Add(itemCountLines);
// Return the menu
return menu;
}
private void UploadFiles()
{
// Builder for the output
var builder = new StringBuilder();
// Go through each file.
foreach(var filePath in SelectedItemPaths)
{
// Count the lines
builder.AppendLine(string.Format("{0} - {1} Lines", Path.GetFileName(filePath), File.ReadAllLines(filePath).Length));
}
// Show the output
MessageBox.Show(builder.ToString());
}
}
}
- Я использовал .* вместо .txt< /code>, поскольку конечной целью этого расширения оболочки будет загрузка файлов на мой сервер с минимальным щелчком мыши, и я хочу, чтобы оно применялось ко ВСЕМ файлам, а не только к файлам .txt.
< li>Я удалил ссылку на изображение под текстом = «Загрузить файл», потому что оно не скомпилировалось. Значок изображения не показался мне важным, поэтому я удалил его.
Я дважды пытался очистить все записи реестра, связанные с этим расширением оболочки, и повторно запустил regasm дважды (всегда успешно), но не удалось увидеть новый пункт меню оболочки. Требуется ли перезагрузка?
Вот моя DLL, загруженная в диспетчер сервера:

Я вижу 2 потенциальные проблемы:
- 64-битные серверы показывают, что не установлены. Почему? Это проблема?
- И 32-битные, и 64-битные серверы отображаются как незарегистрированные. Определенно это кажется проблемой (а может быть, и самой проблемой), но я запустил regasm для своей DLL и получил сообщение «Типы зарегистрированы успешно».
Подробнее здесь: https://stackoverflow.com/questions/786 ... in11-win10
Мобильная версия