簡體   English   中英

檢查PC和顯示安裝程序中安裝的Acrobat Reader

[英]check Acrobat reader installed in pc and display installer

我的經理詢問了具有PDF文件的自動播放CD,並檢查了用戶PC上是否已在用戶PC上安裝了Adobe Acrobat,或者是否安裝了安裝了該消息的消息,從CD安裝了此程序,我有Windows應用程序來檢查PC中是否安裝了Adobe Reader或Acrobat是否做得很好,但我想如果未安裝該程序,則從CD播放acrobat Reader安裝程序,然后用戶安裝該程序。

 public Form1()
    {
        RegistryKey adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Adobe");
        if (adobe != null)
        { 
            RegistryKey acroRead = adobe.OpenSubKey("Acrobat Reader");
            if (acroRead != null)
            { 
                string[] acroReadVersions = acroRead.GetSubKeyNames();
                MessageBox.Show("The following version(s) of Acrobat Reader are installed: ");

                foreach (string versionNumber in acroReadVersions)
                { 
                    MessageBox.Show(versionNumber);
                } 
            } 

        } 
        else
        { 
            MessageBox.Show("The following version(s) of Acrobat Reader arenot installed: ");

        } 

您需要調用安裝程序過程。 這樣的事情。

Process myProcess = new Process();
myProcess.StartInfo.FileName = "path to acrobat installer"; 
myProcess.Start();

更好的方法是為此在應用程序設置中添加自定義操作。

有幾種檢查方法。

1 /檢查已安裝的應用程序(Win Installer)

每個Windows安裝程序項目(MSI)都有一個升級代碼和一個產品代碼。 簡而言之,產品代碼定義了已安裝應用程序的版本及其依賴性。 升級代碼在不同版本上保持不變。 您可以在產品代碼中搜索acrobat閱讀器,並使用Windows Installer dll來檢查它是否已安裝。 在codeproject上有一些代碼(搜索MsiInterop),它將具有所有需要的dllimport。

2 /保持簡單。

為什么不只檢查是否有與帶有PDF擴展名的文件相關聯的應用程序?
如果有關聯的應用程序(可能是Acrobat Reader以外的其他東西,例如foxit),則認為一切正常。 否則,請啟動指向http://get.adobe.com/reader/的瀏覽器

這樣,您的應用程序對用戶選擇的PDF閱讀器不承擔任何責任。

在C#中訪問Windows安裝程序:

public enum InstallState
{
       NotUsed = -7,
       BadConfig = -6,
       Incomplete = -5,
       SourceAbsent = -4,
       MoreData = -3,
       InvalidArg = -2,
       Unknown = -1,
       Broken = 0,
       Advertised = 1,
       Removed = 1,
       Absent = 2,
       Local = 3,
       Source = 4,
       Default = 5
}   
[System.Runtime.InteropServices.DllImport("msi.dll", CharSet = CharSet.Unicode)]
internal static extern InstallState MsiQueryProductState(string szProduct);

如果您知道Adobe Acrobat的產品代碼,則可以查詢其安裝狀態:

bool acrobatInstalled = allAcrobatReaderProductCodes.Any(guid =>
{
     var productCode = "{" + guid.ToString().ToUpper() + "}";
     var msiState = MsiQueryProductState(productCode);
     return msiState == InstallState.Local || msiState == InstallState.Default);
});

其中allAcrobatReaderCodes是所有acrobat閱讀器產品代碼的IEnumerable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM