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?
Trả lời
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:
- 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
- Tạo khóa registry (thư mục):
- Đố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 ".
- Đố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".
- 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.
- 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)
- 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)
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.
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
- 1. Có thể sử dụng các biến môi trường trong kịch bản lệnh Inno Setup không?
- 2. Biến môi trường Xcode cho các dự án con
- 3. Tôi có thể giữ thông tin đăng nhập git trong các biến môi trường không?
- 4. Các biến môi trường trong một dự án Visual Studio C++ được đặt ở đâu?
- 5. Tôi có thể nhận các biến môi trường trong tập lệnh WSH vbscript không?
- 6. Đặt biến môi trường gỡ lỗi/chạy trong dự án Visual Studio 2010 C#?
- 7. Sử dụng biến môi trường trong tệp dự án Eclipse PyDev
- 8. Xác định đường dẫn dự án trong một giải pháp thông qua Macro/Biến môi trường
- 9. Có danh sách các biến môi trường Visual Studio không?
- 10. Làm cách nào để cập nhật biến môi trường trong dự án triển khai Visual Studio
- 11. tự động tải môi trường của dự án lên irb
- 12. Biến môi trường được lưu trong sổ đăng ký ở đâu?
- 13. Xem các biến môi trường cửa sổ trong Cygwin
- 14. Không thể cập nhật biến môi trường "PATH" bằng WIX
- 15. Sử dụng các biến môi trường trong Monodevelop với MonoTouch
- 16. Thay đổi biến môi trường trong eclipse
- 17. Bạn có thể xóa các dự án appengine không?
- 18. Ruby không thể thấy biến môi trường NLS_LANG
- 19. Chỉ định c: \ ProgramData folder trong dự án Setup?
- 20. Biến môi trường NodeJS trong Grunt
- 21. Có thể sử dụng các biến môi trường trong bình luận CFLAGS của cgo không?
- 22. Biến môi trường Xcode Không có trong Kho lưu trữ
- 23. Sử dụng các đoạn web (API Servlet 3.0) trong môi trường dự án lớn
- 24. Biến môi trường Ruby
- 25. Tôi có thể tin tưởng các biến môi trường của mình không?
- 26. Biến môi trường Javascript
- 27. MSBuild các biến môi trường bắt buộc
- 28. Biến môi trường CMAKE_INSTALL_PREFIX - không hoạt động?
- 29. Có cách nào để thay thế các biến môi trường trong application.conf của playframework không?
- 30. Có một biến môi trường qua Ruby
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 đó. –
@CodyGray, vui lòng giải thích các giải pháp thay thế có thể có. –
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. –