2012-08-05 34 views
13

Tôi đang làm việc trên ứng dụng giao diện điều khiển windows C# mà tôi muốn cho phép người dùng cài đặt trên máy tính của họ.Lập trình đăng ký chương trình vào Thêm/Loại bỏ chương trình và lưu trữ tệp trong một tệp thực thi

Tôi muốn làm cho Windows Installer của riêng tôi thực thi như các công cụ triển khai thiết lập được xây dựng trong Visual Studio, có vẻ hơi thiếu chức năng cho các tùy chỉnh và tài liệu.

Vì vậy, vì tôi muốn tạo trình cài đặt Windows của riêng mình, làm cách nào để đăng ký chương trình vào cửa sổ Thêm/Loại bỏ Chương trình để họ có thể chọn gỡ cài đặt lại nếu muốn và khởi chạy lại chương trình cài đặt của tôi .

Ngoài ra, tệp thực thi rõ ràng sẽ cần phải sao chép tệp vào các vị trí khác nhau trên PC, tức là C:\Program Files vậy làm cách nào để lưu trữ các tệp thi hành trong trình cài đặt Windows để có thể di chuyển chúng vào đúng vị trí.

Điều này có thể thực hiện được không?

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp.

+0

Bạn đã thử các tùy chọn triển khai ClickOnce chưa? –

+0

Tại sao tái tạo bánh xe? Nếu bạn không thích công cụ bao gồm cửa sổ, tôi muốn đi đến NSIS: http://nsis.sourceforge.net/Main_Page. – Mark

+0

Làm thế nào để sử dụng WiX? – siride

Trả lời

23

Dưới đây là một thói quen, chúng tôi sử dụng để đăng ký chương trình của chúng tôi trong Add/Remove Programs:

private void CreateUninstaller() 
{ 
    using (RegistryKey parent = Registry.LocalMachine.OpenSubKey(
       @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", true)) 
    { 
     if (parent == null) 
     { 
      throw new Exception("Uninstall registry key not found."); 
     } 
     try 
     { 
      RegistryKey key = null; 

      try 
      { 
       string guidText = UninstallGuid.ToString("B"); 
       key = parent.OpenSubKey(guidText, true) ?? 
         parent.CreateSubKey(guidText); 

       if (key == null) 
       { 
        throw new Exception(String.Format("Unable to create uninstaller '{0}\\{1}'", UninstallRegKeyPath, guidText)); 
       } 

       Assembly asm = GetType().Assembly; 
       Version v = asm.GetName().Version; 
       string exe = "\"" + asm.CodeBase.Substring(8).Replace("/", "\\\\") + "\""; 

       key.SetValue("DisplayName", "My Program"); 
       key.SetValue("ApplicationVersion", v.ToString()); 
       key.SetValue("Publisher", "My Company"); 
       key.SetValue("DisplayIcon", exe); 
       key.SetValue("DisplayVersion", v.ToString(2)); 
       key.SetValue("URLInfoAbout", "http://www.blinemedical.com"); 
       key.SetValue("Contact", "[email protected]"); 
       key.SetValue("InstallDate", DateTime.Now.ToString("yyyyMMdd")); 
       key.SetValue("UninstallString", exe + " /uninstallprompt"); 
      } 
      finally 
      { 
       if (key != null) 
       { 
        key.Close(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(
       "An error occurred writing uninstall information to the registry. The service is fully installed but can only be uninstalled manually through the command line.", 
       ex); 
     } 
    } 
} 
+0

Chữ "B" là gì? – MacGyver

+1

@MacGyver, 'B' có nghĩa là" 32 chữ số được phân tách bằng dấu gạch nối, được đính kèm trong dấu ngoặc nhọn ", là định dạng mà đăng ký sử dụng cho các hướng dẫn. https://msdn.microsoft.com/en-us/library/97af8hh4(v=vs.110).aspx –

+2

Vì vậy, có vẻ như "UninstallGuid" và "UninstallRegKeyPath" không được xác định trong mã nguồn của bạn. Tôi giả định thứ hai là đường dẫn của exe để gỡ cài đặt ứng dụng. Bạn có thể bình luận về hai điều này không? Tôi cũng có thể đăng câu hỏi để hoàn tác khóa reg này, nhưng đó là câu hỏi thứ ba và cuối cùng của tôi. – MacGyver

0

Bạn có thể thử triển khai ứng dụng của mình bằng cách sử dụng ClickOnce hoặc Microsoft Installer technology (msi).

+1

ClickOnce dường như cung cấp cho bạn ít quyền kiểm soát hơn so với việc tạo Visual Studio MSI. – Boardy

2

Không xây dựng trình cài đặt của riêng bạn, sử dụng công cụ triển khai đã được chứng minh như: NSIS, Inno Setup hoặc WiX. Tất cả đều miễn phí và có rất nhiều tính năng.

+4

đừng quên rằng họ có khuyết điểm riêng của mình như đường cong học tập, nhưng một ngôn ngữ lập trình khác, nhiều tệp để xử lý, bitness (không có AnyCPU), nội địa hóa – Firo

+0

Tôi không quên. Nhưng cho tín dụng cho những người xây dựng những hệ thống khá phức tạp này mà họ đã giải quyết được rất nhiều vấn đề, bạn sẽ không có thời gian để tự mình làm ngay cả khi nó giúp bạn tiết kiệm một ngôn ngữ mới. Lưu ý: không có vấn đề gì với bitness hoặc nội địa hóa và bạn sẽ không kết thúc với nhiều tệp để xử lý. – Eden

+0

Thêm bitrock nữa. Tôi đã sử dụng nó một lần. Nó rất dễ sử dụng. Nhưng không phải nguồn mở. – prabhakaran

0

Tôi khuyên bạn nên sử dụng MSI Installer trong trường hợp này vì nó cho phép bạn kiểm soát chi tiết gói (tức là tên), nơi sao chép tệp trên máy khách và cho phép thêm tệp bổ sung mà bạn muốn đưa vào. msi cài đặt.

0

Đối với tình yêu của thần không sử dụng ClickOnce ... nó là nhiều rắc rối hơn là giá trị. Nếu bạn không có quyền quản trị đối với một máy tính và cần phải cài đặt một cái gì đó thì nó đáng để bạn xin phép.

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