我创建了一个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
避免自定义操作 :请尽可能避免自定义操作。这是我对他们的宣传。你所需要知道的是,它们很容易出错。如果有内置功能可以做到这一点,请使用它们。
注册表视图 :根据微软的描述,请尝试使用此内置功能:
- 打开Visual Studio项目
- 在视图菜单上,指向编辑器,然后单击注册表
- 在注册表视图中创建适当的键和值
请考虑使用其他工具进行部署。至少要阅读下面对Visual Studio安装项目限制的描述。
Visual Studio安装程序项目问题 :您应该了解Visual Studio安装器项目中的一些问题建议您继续使用WiX:
- 为什么在VDPROJ上使用Windows Installer XML(WiX(
- Visual Studio将项目发布到一个简单的安装程序中
进一步链接 :
- 安装项目入门