2011-12-19 28 views
7

tôi đang tạo ra một Visual Studio 2008 Setup Wizard cho chương trình của tôi
http://support.microsoft.com/kb/307353
tôi thấy rằng nó có thể để thêm các khóa registry, vv .. Có một khả năng để đăng ký biến cửa sổ môi trường mà không cần viết một hành động tùy chỉnh?
Và nếu tôi phải viết một hành động tùy chỉnh, cách nào ít đau đớn nhất để làm như vậy?Có thể đăng ký các biến môi trường trong dự án Setup Wizard không?

+0

Không có thứ gì như Visual Studio 2009. Và tôi có thể đếm số lượng cá thể trên trình cài đặt thực tế cần đăng ký biến môi trường. Rất có thể là rất tốt nếu bạn không phải là một trong những trường hợp đó. –

+0

@CodyGray, vui lòng giải thích các giải pháp thay thế có thể có. –

+1

Tôi đoán anh ấy muốn giới thiệu sổ đăng ký hoặc tệp dữ liệu trong thư mục hồ sơ/thư mục hồ sơ người dùng. Hoặc nếu dự án của bạn là một dự án .Net, một giá trị app.config. Mặc dù tôi không đồng ý với sự thúc đẩy của tuyên bố - nếu bạn đang thêm chương trình của bạn vào 'PATH', đó có thể là một lý do tốt để muck xung quanh với các biến môi trường. Nếu không, tôi đồng ý rằng có lẽ những nơi tốt hơn để đưa dữ liệu của bạn. –

Trả lời

6

Sử dụng Visual Studio 2008, bạn có thể dễ dàng làm điều đó bằng cách thiết lập các biến thích hợp trong Windows registry:

  1. Trong Solution Explorer, nhấp chuột phải vào dự án của bạn (không phải giải pháp), và chọn Xem -> registry
  2. Tạo khóa registry (thư mục):
    1. Đối với một tài biến: nhấp chuột phải vào HKEY_CURRENT_USER, chọn "Khóa mới "và đặt tên là" Môi trường ".
    2. Đối với một Hệ thống biến: Right-Click trên HKEY_LOCAL_MACHINE, chọn "New Key ", và đặt tên là "HỆ THỐNG". Tiếp tục thực hiện việc này để tạo đường dẫn "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment".
  3. Nhấp chuột phải vào các Môi trường chìa khóa (thư mục), chọn New-> String, và cung cấp cho nó tên mà bạn muốn.
  4. Với chuỗi lựa chọn, tìm ra Thuộc tính cửa sổ (Alt + Enter sẽ đưa nó lên)
  5. Trong cửa sổ Properties, điền vào Value bạn muốn.

Nếu bạn muốn Giá trị tham chiếu đến thư mục cài đặt, bạn có thể làm như thế này bằng biến thuộc tính: [TARGETDIR] SomeFile.ext (xem http://msdn.microsoft.com/en-us/library/aa370905%28v=vs.85%29.aspx cho các biến tài sản hơn)

1

Trình cài đặt Windows hỗ trợ các biến môi trường qua bảng Environment, nhưng các dự án thiết lập Visual Studio không cho phép bạn sử dụng nó.

Một giải pháp là sử dụng một thiết lập công cụ authoring khác nhau mà hỗ trợ biến môi trường: http://en.wikipedia.org/wiki/List_of_installation_software

Một giải pháp khác là để tự thêm nó vào bảng Môi trường bằng cách chỉnh sửa MSI với Orca.

Ngoài ra còn có phương pháp hành động tùy chỉnh mà bạn đã đề cập.

3

Câu trả lời đầu giải thích làm thế nào để làm điều đó mà không có một hành động tùy chỉnh nhưng những người tìm kiếm một hành động tùy chỉnh có thể sử dụng đoạn mã sau làm mẫu:

[RunInstaller(true)] 
public partial class GRInstallCustomAction : System.Configuration.Install.Installer 
{ 
    string environmentKey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; 
    string pathUrl = "C:\\Program Files (86)\\TargetFolder"; 
    public GRInstallCustomAction() 
    { 
     InitializeComponent(); 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Install(IDictionary stateSaver) 
    { 
     base.Install(stateSaver); 
    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Commit(IDictionary savedState) 
    { 
     base.Commit(savedState); 

     string environmentVar = Environment.GetEnvironmentVariable("PATH"); 


     //get non-expanded PATH environment variable    
     string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames); 


     var index = oldPath.IndexOf(pathUrl); 
     if (index < 0) 
     { 
      //set the path as an an expandable string 
      Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath + ";" + pathUrl, RegistryValueKind.ExpandString); 
     } 

    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Rollback(IDictionary savedState) 
    { 
     base.Rollback(savedState); 


    } 

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)] 
    public override void Uninstall(IDictionary savedState) 
    { 
     base.Uninstall(savedState); 

     //get non-expanded PATH environment variable    
     string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames); 

     string removeString = pathUrl + ";"; 
     var index = oldPath.IndexOf(removeString); 
     if (index < 0) 
     { 
      removeString = pathUrl; 
      index = oldPath.IndexOf(removeString); 
     } 

     if (index > -1) 
     { 
      oldPath = oldPath.Remove(index, pathUrl.Length); 
      //set the path as an an expandable string 
      Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath, RegistryValueKind.ExpandString); 
     } 
    } 
} 

đi bộ này -TV chỉ cho bạn cách tạo và áp dụng hành động tùy chỉnh: https://msdn.microsoft.com/en-us/library/d9k65z2d(v=vs.100).aspx

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