安装程序自定义操作-注册COM dll-C#



我创建了一个COM可见项目,并向该项目添加了一个安装向导。我还添加了一个自定义操作类,并尝试写入注册表。

下面是一个wxs安装程序的示例条目(我对此没有任何经验(,在我的自定义操作类的安装操作期间,我如何在C#中重新创建它?

<RegistryKey Root='HKCU' Key='SoftwareAutodeskStructuralRSAAddIns{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添加为与我的COM dll相同的GUID是否正确?

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的正确方法是什么?

我走对了吗?感谢阅读,Tom

避免自定义操作 :请尽可能避免自定义操作。这是我对他们的宣传。你所需要知道的是,它们很容易出错。如果有内置功能可以做到这一点,请使用它们。


注册表视图 :根据微软的描述,请尝试使用此内置功能:

  1. 打开Visual Studio项目
  2. 视图菜单上,指向编辑器,然后单击注册表
  3. 在注册表视图中创建适当的键和值

请考虑使用其他工具进行部署。至少要阅读下面对Visual Studio安装项目限制的描述。


Visual Studio安装程序项目问题 :您应该了解Visual Studio安装器项目中的一些问题建议您继续使用WiX

  • 为什么在VDPROJ上使用Windows Installer XML(WiX(
  • Visual Studio将项目发布到一个简单的安装程序中

进一步链接

  • 安装项目入门

相关内容

  • 没有找到相关文章

最新更新