2009-12-28 26 views
5

Tôi đã viết một snap-in trong C#.Cài đặt snap-in MMC tùy chỉnh

Tôi đã thử cài đặt nó bằng installutil và nó không hoạt động lúc đầu. Tôi nhận thấy rằng trên trang msdn họ nói để chạy mmcperf để cài đặt management.dll vào GAC.

Làm điều này, tôi đã có thể cài đặt snap của tôi và chạy nó. Tôi có một máy xp.

Câu hỏi của tôi là làm cách nào để triển khai snap tùy chỉnh của tôi trên máy khách hàng ... Tôi cần cân nhắc những điều gì? (Hệ điều hành?, khung .net, được cài đặt mmc 3.0, v.v.)

Tôi có thể chạy mmcperf trong khi cài đặt snap của tôi không? Đây có phải là một cách tiếp cận tốt?

Trả lời

8

Sự cố của bạn có thể khác, nhưng tôi đã từng gặp sự cố tương tự trên máy tính 64 bit và phát hiện ra những điều sau. Nếu sự cố của bạn không liên quan đến 32/64-bit, tôi không thể nói vấn đề là gì và tôi xin lỗi vì đã dành thời gian của bạn.

Bạn sẽ có thể cài đặt snap-in bằng InstallUtil. Tuy nhiên, lưu ý rằng có hai phiên bản riêng biệt trên InstallUtil: Một (mặc định) cho x86 nhị phân, và một cho x64 nhị phân.

Thậm chí nếu bạn biên dịch mã C# của mình cho Bất kỳ CPU nào, bằng cách sử dụng InstallUtil chuẩn sẽ chỉ đăng ký snap-in MMC dưới dạng 32-bit snap-in. Nếu bạn đang chạy trên một hệ điều hành 64-bit, hãy thử bắt đầu MMC như là một quá trình 32-bit (MMC /32 IIRC) và xem nếu snap-in của bạn không có sẵn ở đó.

Để đăng ký snap-in như là một snap-in 64-bit, bạn phải sử dụng phiên bản 64-bit của InstallUtil (thường được tìm thấy trong C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727).

Để đăng ký cả hai phiên bản của snap-in, bạn phải đăng ký nó hai lần.

+0

Cảm ơn, mặc dù nó không giải quyết trực tiếp vấn đề của tôi, nhưng điều đó rất hữu ích. Tôi đang tạo MSI với các hành động tùy chỉnh Cài đặt đầu ra của dự án. Nếu nó là một máy 64 bit, tôi có đúng là giả sử rằng nó sẽ chạy installutil phiên bản 64 bit trong quá trình cài đặt không? – pdiddy

+0

Tôi thực sự không chắc chắn, nhưng tập tin AFAIR msi là 32-bit hoặc 64-bit, vì vậy trừ khi nó rõ ràng là một MSI 64-bit, tôi nghĩ rằng nó sẽ được sử dụng phiên bản 32-bit. Tuy nhiên, bạn có thể dễ dàng kiểm tra điều này bằng cách mở MMC ở chế độ 32 bit để xem liệu snap-in của bạn có sẵn ở đó hay không. Nó thực sự tất cả các nhọt xuống dưới mà nút trong sổ đăng ký snap-in được đăng ký. –

3

Thêm vào phản ứng Đánh dấu SEEMANN của:

Bạn cũng có thể kiểm tra các mục MMC registry trực tiếp, để xác minh xem snapin của bạn đã được đăng ký trong mục đăng ký 64 bit hoặc 32-bit đăng ký chuyển hướng (một trong đó chương trình lập theo Wow6432Node):

  • 64 chút snapin: HKLM \ Software \ Microsoft \ MMC \ snapins \ FX: {SNAP-IN-GUID} ...
  • 32-bit snapin: HKLM \ Software \ Wow6432Node \ Microsoft \ MMC \ SnapIns \ FX: {SNAP-IN-GUID} ...

Nếu mục nhập của bạn chỉ dưới HKLM \ Software \ Wow6432Node thì bạn đã đăng ký các snap 32 bit và lời khuyên của Mark về chạy "MMC/32" sẽ hiển thị chúng. Đó không phải là kết thúc của thế giới: nếu bạn lưu phiên MMC của mình dưới dạng phím tắt snapin, tôi nghĩ rằng nó sẽ mở phiên bản 32 bit của MMC khi chạy.

Nếu bạn thực sự muốn đăng ký snapin 64 bit (và tại sao không?), MSDN có một trang trên MMC 64-Bit Versus 32-Bit Considerations với một số chi tiết khác, bao gồm đường dẫn InstallUtil để gọi để nhận các mục đăng ký 64 bit so với 32 bit. Tuy nhiên, lưu ý rằng một số ứng dụng bao bì của MSI thực sự bao gồm một bản sao của InstallUtil.exe bên trong bản thân MSI dưới dạng nhị phân, thay vì gọi một bản trên máy mục tiêu. Page 6(Bạn có thể kiểm tra xem điều này có đang xảy ra hay không bằng cách xem bảng nhị phân MSI và hành động tùy chỉnh bằng cách sử dụng Orca.) Nếu chỉ có InstallUtil 32 bit, nó sẽ đặt đăng ký của bạn sai địa điểm (Wow6432Node), may mắn cho bạn.

Như tôi đã hiểu, Windows Installer "Right Way" (TM) là không sử dụng InstallUtil (tôi nghĩ chủ yếu là do các vấn đề liên quan đến việc chạy các hành động tùy chỉnh MSI được quản lý?). Trong mọi trường hợp, nếu bạn tránh sử dụng InstallUtil, bạn hoàn toàn đăng ký snap của bạn bằng cách tạo các mục đăng ký một cách rõ ràng trong MSI, đặt Windows Installer kiểm soát việc tạo và loại bỏ chúng.

Cách khác, bạn có thể làm một hành động tùy chỉnh để gọi InstallUtil.exe dưới thư mục Framework64 máy mục tiêu của. Điều đó sẽ có được vị trí đăng ký snapin đúng, nhưng sau đó bạn sẽ phải đối phó với thực tế là hành động tùy chỉnh sẽ bật lên một cửa sổ trình bao CMD trong khi đang chạy, nếu điều đó làm phiền bạn. Không chắc chắn nếu công cụ soạn thảo MSI của bạn có tương đương, nhưng trong WiX có Quiet Execution Custom Action. (Tôi cho rằng nếu bạn không sử dụng WiX, bạn vẫn có thể bao gồm WixUtilExtension.dll và gọi "CAQuietExec64" sau khi thiết lập thuộc tính QtExec64CmdLine một cách thích hợp ... nhưng nếu bạn đang làm việc ở cấp độ đó của tác giả MSI, bạn có thể sẽ tốt hơn chỉ để chuyển đổi và sử dụng WiX :)

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