Я хочу зарегистрировать сборку .net как COM.Регистрация COM без прав администратора
Фактически, что это означает, насколько я знаю, что вместо HKEY_CLASSES_ROOT
Я хочу, чтобы записи были записаны в HKEY_CURRENT_USER/Software/Classes
, так что права UAC/Admin не нужны.
Найдено два решения этой проблемы, с как я изо всех сил:
1) Программным способом, с помощью следующего кода:
IntPtr key;
var openKeyresult = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Classes", 0, (int)RegistrySecurity.KEY_WOW64_64KEY, out key);
var overrideKeyResult = RegOverridePredefKey(HKEY_CLASSES_ROOT, key);
var registerResult = Registrar.RegisterAssembly(GetAssembly(), AssemblyRegistrationFlags.SetCodeBase);
в этом подходе, overrideKeyResult
является 6, что соответствует ERROR_INVALID_HANDLE, таким образом, RegisterAssembly
выдает исключение «отказ в доступе», поскольку оно пытается записать в HKEY_CLASSES_ROOT
.
на боковой ноте: каждый раз, когда я запускаю RegOpenKeyEx
, значение ключа отличается, это нормально?
2) с Regasm
с помощью regasm.exe
с /regfile
флагом, а затем заменить в генерируемый .reg
файл все HKEY_CLASSES_ROOT
вхождений с HKEY_CURRENT_USER/Software/Classes
это я думаю, что должно работать, но как я разрегистрировать такая сборка, когда я не удалю свой Outlook AddIn?
, как я вижу, я не могу сделать его таким же образом, как регистр, потому что:
var openKeyresult = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Classes", 0, (int)RegistrySecurity.KEY_WOW64_64KEY, out key);
Точно то, что я разработал, только реализовано не так чисто :-) –