Пункт меню расширения оболочки не отображается в Win11/Win10C#

Место общения программистов C#
Ответить
Anonymous
 Пункт меню расширения оболочки не отображается в Win11/Win10

Сообщение Anonymous »

Я использую SharpShell.dll v2.7.2 и тщательно следую инструкциям здесь:
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>Я удалил ссылку на изображение под текстом = «Загрузить файл», потому что оно не скомпилировалось. Значок изображения не показался мне важным, поэтому я удалил его.
Как видите, большая часть кода такая же, как в примере. В Win11 я использую классическое/устаревшее контекстное меню, и оно по-прежнему не работает.
Я дважды пытался очистить все записи реестра, связанные с этим расширением оболочки, и повторно запустил regasm дважды (всегда успешно), но не удалось увидеть новый пункт меню оболочки. Требуется ли перезагрузка?
Вот моя DLL, загруженная в диспетчер сервера:
Изображение

Я вижу 2 потенциальные проблемы:
  • 64-битные серверы показывают, что не установлены. Почему? Это проблема?
  • И 32-битные, и 64-битные серверы отображаются как незарегистрированные. Определенно это кажется проблемой (а может быть, и самой проблемой), но я запустил regasm для своей DLL и получил сообщение «Типы зарегистрированы успешно».
Что такое Я делаю неправильно? Как сделать так, чтобы файл загрузки отображался в контекстном меню в Win10/Win11, когда я щелкаю правой кнопкой мыши любой файл в проводнике Windows?

Подробнее здесь: https://stackoverflow.com/questions/786 ... in11-win10
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»