2009-11-23 33 views
5

Trong trình chỉnh sửa Tác vụ Tùy chỉnh, tôi đã thêm hành động tùy chỉnh vào các giai đoạn Cài đặt và Gỡ cài đặt của quy trình. Trong cửa sổ thuộc tính, tôi đã đánh dấu thuộc tính CustomActionData là:Cài đặt vấn đề Hành động Tùy chỉnh - không thể ghi để đăng ký khóa

/TARGETDIR = "[TARGETDIR]" 

Tôi hy vọng rằng thông tin thư mục cài đặt trên sẽ chuyển sang hành động tùy chỉnh.

Hành động tùy chỉnh dường như bị sa thải, nhưng tôi nhận được thông báo lỗi sau:

"Lỗi 1001. Không thể ghi vào của đăng ký khóa" (hoặc một cái gì đó như thế, tôi đang dịch nó từ ngôn ngữ địa phương của tôi).

Tôi đang làm gì sai?

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(); 
     } 
    } 
} 
+0

Để cài đặt các khóa registry của tôi, tôi sử dụng "Registry Chế độ xem" nơi tôi thay đổi nút đăng ký. –

+0

Và làm cách nào để bạn đặt giá trị chính xác? – Maciek

Trả lời

11

Cố gắng thay đổi:
RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path);

Để:
RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

Các vấn đề liên quan