none
C#如何判斷客戶端是否安裝了Adobe Reader 軟件啊? (WinForm) RRS feed

  • 問題

  • 請教各位前輩:
    我在一個WinForm中當程式開啟後, 我想使用開adobe reader去開啟一個pdf檔(這部份已完成)
    ,但要先判斷是否已安裝pdf reader, 若無,則要show errormessage, 有的話, 就開啟pdf檔.
    請問要怎麼判斷...該電腦是否已安裝了pdf的軟體呢? 謝謝

    後來我想說利用註冊檔來判斷
    private bool IsRegeditExit(string name)
    {
    bool _exit = false;
    string[] subkeyNames;
    RegistryKey hkml = Registry.LocalMachine;
    RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
    RegistryKey Classes = software.OpenSubKey("Classes",true);
    RegistryKey Installer = Classes.OpenSubKey("Installer",true);
    RegistryKey Products = Installer.OpenSubKey("Products",true);
    RegistryKey Classes = software.OpenSubKey("Classes",true);
    RegistryKey 68AB67CA7DA78201B7449A0300000010 = Classes.OpenSubKey("68AB67CA7DA78201B7449A0300000010",true);
    subkeyNames = 68AB67CA7DA78201B7449A0300000010.GetSubKeyNames();
    foreach(string keyName in subkeyNames)
    {
    if(keyName == name)
    {
    _exit = true;
    return _exit;
    }
    }
    return _exit;
    }


    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\68AB67CA7DA78201B7449A0300000010

    ProductName:
    Adobe Reader 9.3.1 - Chinese Traditional // check here
    但是如果有更新或是版本不同的話,機碼不同
    就無法判斷正確???
    請教各位先進提供方法...謝謝
    2010年2月26日 上午 08:59

解答

    • 已提議為解答 Alex_Lee 2010年2月26日 下午 03:16
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月26日 上午 09:08
  • http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=28&Function=209

    直接看是安裝哪套軟體...
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月26日 下午 05:01
  • 以前寫的程式碼,您可以參考看看

    private void button1_Click(object sender, EventArgs e)
    {
        if (checkAdobeReader() == true)
        {
            MessageBox.Show("有安裝 Adobe Reader ");
        }
        else
        {
            MessageBox.Show("沒有安裝 Adobe Reader ");
        }
    }
    
    /// <summary>
    /// 確認是否有安裝 Adobe Reader 
    /// </summary>
    /// <returns>true: 有安裝, false:沒有安裝</returns>
    private bool checkAdobeReader()
    {
        Microsoft.Win32.RegistryKey uninstallNode = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
        foreach (string subKeyName in uninstallNode.GetSubKeyNames())
        {
            Microsoft.Win32.RegistryKey subKey = uninstallNode.OpenSubKey(subKeyName);
            object displayName = subKey.GetValue("DisplayName");
            if (displayName != null)
            {
                if (displayName.ToString().Contains("Adobe Reader"))
                {
                    return true;
                    // MessageBox.Show(displayName.ToString());
                }
            }
        }
        return false;
    }



    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月28日 下午 03:46
    版主

所有回覆

    • 已提議為解答 Alex_Lee 2010年2月26日 下午 03:16
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月26日 上午 09:08
  • http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=28&Function=209

    直接看是安裝哪套軟體...
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月26日 下午 05:01
  • 以前寫的程式碼,您可以參考看看

    private void button1_Click(object sender, EventArgs e)
    {
        if (checkAdobeReader() == true)
        {
            MessageBox.Show("有安裝 Adobe Reader ");
        }
        else
        {
            MessageBox.Show("沒有安裝 Adobe Reader ");
        }
    }
    
    /// <summary>
    /// 確認是否有安裝 Adobe Reader 
    /// </summary>
    /// <returns>true: 有安裝, false:沒有安裝</returns>
    private bool checkAdobeReader()
    {
        Microsoft.Win32.RegistryKey uninstallNode = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
        foreach (string subKeyName in uninstallNode.GetSubKeyNames())
        {
            Microsoft.Win32.RegistryKey subKey = uninstallNode.OpenSubKey(subKeyName);
            object displayName = subKey.GetValue("DisplayName");
            if (displayName != null)
            {
                if (displayName.ToString().Contains("Adobe Reader"))
                {
                    return true;
                    // MessageBox.Show(displayName.ToString());
                }
            }
        }
        return false;
    }



    小歐ou是個菜鳥工程師,回答不好請不要標我的回覆為解答,有網友熱心回覆也請發問者儘快回應,謝謝
    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Lolota Lee 2010年3月2日 上午 09:51
    2010年2月28日 下午 03:46
    版主
  • 感謝各位的幫忙....已經順利解決囉
    我是透過下列方式處理的
    程式中,如何判斷是否安裝PDF軟體
    可應用在其他已安裝於本機軟體是否安裝
    當然也可以寫成判斷無軟體時直接連結程式安裝囉

                RegistryKey adobe = Registry .LocalMachine.OpenSubKey("Software" ).OpenSubKey("Adobe" );

                if (adobe != null )

                      {

                        RegistryKey acroRead = adobe.OpenSubKey("Acrobat Reader" );

                          if (acroRead != null )

                           {

                               string [] acroReadVersions = acroRead.GetSubKeyNames();

                               System.Diagnostics.Process .Start(@"\\10.1.1.9\cnconline\" + Dgv.CurrentRow.Cells["Gv1FILENAME" ].Value.ToString());

                             }

                          else

                             {

                               MessageBox .Show(" 尚未安裝Adobe Reader 軟體, 請洽資訊部#531 協助安裝" , " 訊息" , MessageBoxButtons .OK , MessageBoxIcon .Exclamation);

                             }

                          }

    2010年3月2日 上午 08:42