安装程序自定义操作问题 - 无法写入注册密钥 [英] Installer Custom Action problem - can't write to register key
问题描述
在自定义操作编辑器中,我已将自定义操作添加到过程的安装和卸载阶段.在属性窗口中,我将 CustomActionData 属性标记为:
In the Custom Actions editor I've added the custom action to Install and Uninstall stages of the process. In the properties window I've marked the CustomActionData property as :
/TARGETDIR = "[TARGETDIR]"
我希望上面的内容将安装目录信息传递给自定义操作.
I'm hoping that the above passes the installation directory info into the custom action.
自定义操作似乎正在触发,但我收到以下错误消息:
The custom action seems to be firing, but I'm getting the following error message :
错误 1001.无法写入寄存器的密钥"(或类似的东西,我正在从我的本地语言翻译它).
"Error 1001. Can't write to register's key" (or something like that, I'm translating it from my local language).
我做错了什么?
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
//using System.Windows.Forms;
using Microsoft.Win32;
namespace CustomActions
{
[RunInstaller(true)]
public partial class Installer1 : Installer
{
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
const string key_path = "SOFTWARE\VendorName\MyAppName";
const string key_value_name = "InstallationDirectory";
RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path);
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 Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
const string key_path = "SOFTWARE\VendorName";
const string key_name = "MyAppName";
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 Installer1()
{
InitializeComponent();
}
}
}
推荐答案
尝试改变:RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path);
至:RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
这篇关于安装程序自定义操作问题 - 无法写入注册密钥的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!