2010-05-10 27 views
12

Thật dễ dàng để kiểm tra xem VSTO 2005 SE đã được cài đặt hay chưa bằng cách gọi MsiGetProductInfo() với mã sản phẩm {388E4B09-3E71-4649-8921-F44A3A2954A7}, như listed in MSDN.Cách xác định thời gian chạy VSTO 2010 có được cài đặt không?

Mã sản phẩm cho thời gian chạy VSTO 2010/4.0 là gì? Hoặc là có một cách tốt hơn để xác định nếu nó đã được cài đặt? Điều này là dành cho quá trình cài đặt của chúng tôi.

Ngoài ra, tôi đang cố gắng tìm ra tương tự cho Windows Imaging Component.

Trả lời

9

Cách dễ nhất là kiểm tra sổ đăng ký.

HKLM \ Microsoft \ setup thời gian chạy VSTO \ v4 \ Install

HKLM \ Microsoft \ setup thời gian chạy VSTO \ v4R \ VSTORFeature_CLR40 (này là dành cho các phần mở rộng 4,0 Office)

+1

Câu trả lời thứ hai ở đó (với VSTORFeature_CLR40) có lẽ chính xác hơn. Tôi chỉ có một kịch bản mà các mục đăng ký đầu tiên (HKLM \ Microsoft \ vsto thiết lập thời gian chạy \ v4 \ Install) đã được tìm thấy nhưng addins của tôi sẽ không tải - và trong thực tế VSTO không được cài đặt. – PandaWood

+2

Ai đó có thể giải thích cách phát hiện VSTOR40 đã cài đặt là x86 hay x64 không? Tôi đã cài đặt tất cả các kết hợp của x86 và x64 runtimes, và các phím được đề cập ở trên là những người duy nhất được tạo ra - mọi thứ đều nằm dưới WOW6432Node - có nghĩa là không có cách nào để xác định 'bitness' của thời gian chạy đã cài đặt ... (lưu ý rằng Office 2010 có cả hai hương vị 32 và 64 bit, và các tiến trình .net được sinh ra sẽ có cùng bit-ness như cài đặt Office http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/8d70d66c-fe87-4f38-b154-5804b871e153 /) – Adam

+0

Tôi đã phát hiện ra rằng 'VSTORFeature_' chỉ tồn tại trong x64 lượt cài đặt. Vui lòng xem câu trả lời của tôi bên dưới để biết cài đặt x86. –

3

Phương pháp an toàn nhất và sạch nhất vẫn là kiểm tra các mã sản phẩm, ở đây đó là:

Đối với VSTO 2010 x86, phiên bản 10.0.31124: {41A01180-D9FD-3428-9FD6-749F4C637CBF}

Đối với VSTO 2010 x64, phiên bản 10. 0,31124: {C3600AE6-93A0-3DB7-B7AA-45BD58F133B5}

của chúng tôi nhận khai thác các nội dung của gói sau với 7-Zip và phân tích MSIs với Orca:

http://download.microsoft.com/download/F/3/9/F395E3C2-28A0-4F0D-9E20-FF4D1ADB08D8/vstor40_x86.exe

http://download.microsoft.com/download/F/3/9/F395E3C2-28A0-4F0D-9E20-FF4D1ADB08D8/vstor40_x64.exe

14

Thật không may câu trả lời ở đây cho đến nay không hoàn toàn bao gồm tất cả các cơ sở.

Mã sản phẩm

này không xuất hiện là đáng tin cậy - chúng tôi đang tìm kiếm một phiên bản tối thiểu, không phải là một phiên bản cụ thể. Mặc dù mã sản phẩm theo lý thuyết chỉ được phép thay đổi cho các phiên bản chính, phiên bản VSTO trên máy của tôi - 10.0.40303 - có mã sản phẩm là {A0FE0292-D3BE-3447-80F2-72E032A54875}. Điều này cho thấy rằng Microsoft không nhất thiết phải giữ chúng ổn định, vì vậy tôi đề nghị đây không phải là một lựa chọn tốt.

Phiên bản tệp

Một lựa chọn khác có thể để kiểm tra sự hiện diện/phiên bản của VSTO Assemblies mình, mà thường có thể là% Program Files% \ Common Files \ Microsoft Shared \ VSTO \ 10.0. Tuy nhiên tôi muốn nói thư mục này không được bảo đảm - thư mục thực sự xuất hiện để được chỉ định trong sổ đăng ký, nhưng rõ ràng giải pháp này hiện không tốt hơn là chỉ nhận phiên bản từ sổ đăng ký trực tiếp ...

Registry

Vì vậy, bằng cách đăng ký có lẽ là tùy chọn duy nhất còn lại.

Thật không may, phiên bản thời gian chạy VSTO có thể xuất hiện ở bất kỳ một trong 4 địa điểm đăng ký:

  • HKLM \ SOFTWARE \ Microsoft \ VSTO Runtime Setup \ v4 (32-bit, VSTO cài đặt từ Văn phòng lắp đặt 2010)
  • HKLM \ SOFTWARE \ Microsoft \ VSTO Runtime Setup \ v4R (32-bit, VSTO cài đặt từ phân phối)
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 (64 bit, VSTO cài đặt từ Văn phòng lắp đặt 2010)
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4R (64-bit, VSTO cài đặt từ phân phối)

Lưu ý: Tôi không có một nguồn dứt khoát cho điều này - tôi đang trộn lẫn các bit thông tin từ, ví dụ: this blog post by Wouter van Vugtthis SO answer. Có thể còn nhiều hơn thế nữa.

Bên cạnh đó, có thể có yêu cầu phiên bản tối thiểu, mặc dù tôi nghi ngờ rằng trong thực tế này sẽ chỉ ảnh hưởng đến người chạy các phiên bản tiền phát hành của Office 2010:

Visual Studio 2010 Công cụ cho runtime Văn phòng cũng tàu với Microsoft Office 2010. Tuy nhiên tại thời điểm Office 2010 RTM, thời gian chạy với Office chỉ hỗ trợ các giải pháp Office nhắm mục tiêu Khuôn khổ .NET 3.5. Nếu giải pháp của bạn nhắm mục tiêu Khuôn khổ .NET 3.5, nó có thể chạy hoặc nếu Office 2010 được cài đặt hoặc nếu Visual Studio 2010 Công cụ cho Office Runtime redistributable được cài đặt. Nếu các giải pháp văn phòng của bạn nhắm mục tiêu Khuôn khổ .NET 4, bạn phải phân phối lại Công cụ Visual Studio 2010 cho thời gian chạy Office (citation).

0

Các khóa này khác nhau tùy theo hệ điều hành bạn đang cài đặt. Tôi cẩn thận cài đặt vsto độc lập và văn phòng 2010 và 2013 .exe trong x86 và x64. Để sử dụng registry để kiểm tra xem VSTO được cài đặt, bạn cần phải xác minh sự tồn tại của các phím sau:

cho x64:

  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 -> Install

  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ VSTO Runtime Setup \ v4 -> ProductCode

cho x86:

  • HKLM \ SOFTWARE \ Microsoft \ VSTO Runtime Setup -> InstallerPath

Edit: Những gì tôi thực sự đã kết thúc làm, đã xác minh rằng v4 thư mục tồn tại.

-2

Mã này. Trong phương thức công khai, chúng tôi xác định là VSTO được cài đặt từ gói thời gian chạy Office hoặc VSTO. Trong phương pháp tư nhân, kiểm tra xem phiên bản là tương đương hoặc lớn hơn so với phiên bản VSTO2010

public static bool CheckVSTO2010 () { 
 
     string regFragment = IntPtr.Size == 8 ? "\\Wow6432Node\\" : "\\"; 
 
     string regVSTO = string.Format(@"SOFTWARE{0}Microsoft\VSTO Runtime Setup\", regFragment); 
 
     return CheckVSTOVersion(regVSTO + "v4\\") || CheckVSTOVersion(regVSTO + "v4R\\"); 
 
    } 
 

 

 
    private static bool CheckVSTOVersion (string keyPath) { 
 
     using (var key = Registry.LocalMachine.OpenSubKey(keyPath)) { 
 
      //Not installed 
 
      if (key == null) { 
 
       return false; 
 
      } 
 
      var releaseKey = key.GetValue("Version"); 
 
      if (releaseKey != null && !string.IsNullOrEmpty(releaseKey.ToString())) { 
 
       var version = new Version(releaseKey.ToString()); 
 
       return version.Major >= 10 && version.Build >= 40820; 
 
      } 
 
     } 
 
     return false; 
 
    }

+2

Mặc dù mã được đánh giá cao, nó luôn luôn nên có một lời giải thích kèm theo. Điều này không phải là dài, nhưng nó được mong đợi. – peterh

0

tôi cần một cách để phát hiện điều này khi triển khai Vstor như một ứng dụng trong SCCM 2012. Tôi đã sử dụng PowerShell sau kịch bản để lấy thông tin từ WMI.

Nếu phiên bản là 10.0.50908, đầu ra được tạo. SCCM xem xét việc phát hiện thành công nếu tập lệnh phát hiện trả về bất kỳ giá trị nào.

$VstorVersion = Get-WmiObject -Query "select ProductVersion from SMS_InstalledSoftware where ARPDisplayName = 'Microsoft Visual Studio 2010 Tools for Office Runtime (x64)'" -NameSpace "root\cimv2\sms" 
if ($VstorVersion.ProductVersion -ge '10.0.50908') {Write-Host "Found"} 
Các vấn đề liên quan