Я создал видимый COM-проект и добавил в него мастер установки.Я также добавил класс пользовательских действий и попытался записать его в реестр.
Ниже приведен пример записи для установщика wxs (с которым у меня нет опыта), как я могу восстановить это в C # во времядействие по установке моего класса пользовательских действий?
<RegistryKey Root='HKCU' Key='Software\Autodesk\Structural\RSA\AddIns\{24D63E1C-E503-4EB4-9381-BF9F6A35E199}'>
<RegistryValue Type='binary' Name='AddInsType' Value='0'/>
<RegistryValue Type='binary' Name='Enable' Value='1'/>
<RegistryValue Type='string' Name='File' Value='[INSTALLDIR]myaddin.dll'/>
<RegistryValue Type='string' Name='Guid' Value='{24D63E1C-E503-4EB4-9381-BF9F6A35E199}'/>
<RegistryValue Type='binary' Name='Guid Type' Value='2'/>
<RegistryValue Type='binary' Name='KeepMenuGrade' Value='0'/>
<RegistryValue Type='string' Name='KeyName' Value='{24D63E1C-E503-4EB4-9381-BF9F6A35E199}'/>
Это то, что я имею до сих пор в своем классе пользовательских действий, используя этот ответ .Правильно ли добавить key_value_name в качестве того же GUID, что и мой COM dll?
namespace RegisterRoboPython
{
[RunInstaller(true)]
public partial class RegisterRoboPython : Installer
{
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
const string key_path = "Software\\Autodesk\\Structural\\RSA\\AddIns";
const string key_value_name = "{5a0d8941-241c-481c-9811-2c76a91bf17c}";
RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
if (key == null)
{
key = Registry.LocalMachine.CreateSubKey(key_path);
}
string tgt_dir = Context.Parameters["TARGETDIR"];
key.SetValue(key_value_name, tgt_dir);
}
public override void Commit(System.Collections.IDictionary savedState)
{
base.Commit(savedState);
}
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
const string key_path = "Software\\Autodesk\\Structural\\RSA\\AddIns";
const string key_name = "{5a0d8941-241c-481c-9811-2c76a91bf17c}";
RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path);
if (key.OpenSubKey(key_name) != null)
{
key.DeleteSubKey(key_name);
}
}
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
public RegisterRoboPython()
{
InitializeComponent();
}
}
Редактировать 1: При запуске установки .msi я получаю следующую ошибку:
system.argumentexception FILE = DOES NOT EXIST
IF THIS PARAMETER IS USED AS AN INSTALLER OPTION THE FORMAT MUST BE /KEY=[VALUE]
Что меня смущает, когда я добавил /TARGETDIR = "[TARGETDIR]"
к свойствам установки / фиксации CustomActionData.
Итак, мой вопрос: как правильно зарегистрировать COM-библиотеку DLL с помощью пользовательских действий?
Я на правильном пути?Спасибо за чтение, Том