2012-02-21 85 views
0

我有簡單的代碼小問題。此代碼在「x86」模式下正常工作,但不在「任何CPU」模式下運行,也許可以在「x86」上運行一個類而在「任何CPU」模式下運行另一個類。代碼:平臺目標x86和任何CPU

namespace Software_Info_v1._0 
{ 
using System; 
using System.Collections.Generic; 
using System.Text; 
using Microsoft.Win32; 

public class Adobe 
{ 
    public string GetAdobeVersion() 
    { 
     try 
     { 
      RegistryKey adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Adobe"); 
      if (adobe != null) 
      { 
       RegistryKey acroRead = adobe.OpenSubKey("Acrobat Reader"); 
       if (acroRead != null) 
       { 
        string[] acroReadVersions = acroRead.GetSubKeyNames(); 
        foreach (string versionNumber in acroReadVersions) 
        { 
         Console.WriteLine("Acrobat Reader version: " + versionNumber); 
        } 
       } 
      } 
     } 
     catch 
     { 
     } 
     return null; 
    } 
} 
} 
+2

爲了讓人們能夠幫助您,您需要準確指定什麼是「無法正常工作」。 – adelphus 2012-02-21 14:41:00

+0

定義「這段代碼工作正常」 - 以什麼方式? – 2012-02-21 14:41:11

+0

你在32位或64位機器上? – jpsstavares 2012-02-21 14:44:39

回答

1

當作爲32位運行時,註冊表項被重定向。當您以64位運行時,它不會被重定向,因此不會觸及Adobe註冊表項重定向到的密鑰。

所以我會創建一個Find32BitRegEntry(string path)函數,它在32位上不做任何事情,並在x64上添加重定向。

0

註冊表項可以位於64位計算機上的不同位置 - 請參閱this。 (請注意,示例代碼中的RegistryKey來自Microsoft.Win32?)

我認爲您需要使用註冊表重定向器,有一些關於here的討論。

相關問題