■52275 / inTopicNo.1) |
64BitOSでのOfficeレジストリの取得方法 |
□投稿者/ まぐねしうむ (102回)-(2010/08/04(Wed) 21:58:22)
|
分類:[.NET 全般]
W64Bit OSでのOfficeレジストリの取得方法
お世話になります。
以前にOfficeのバージョン取得方法に関して教えていただいた件の
続きになります。
その際、レジストリからExcel等のインストール先を調べ
FileVersionInfoにて各種情報を取得するようにプログラムを行いました。
32ビット環境のOSでは取得できたのですがWindows7の64ビット環境で確認した所、
レジストリからインストールパスが取得できないことが判明しました。
おそらく
http://d.hatena.ne.jp/tt_clown/20100331/1270016634
に記載されているOpenSubKey(@"SOFTWARE") で取得できるレジストリ値が変化したせいだと考えています。
そこで試しにコンパイルオプションも変えて確認してみました。
AnyCPU 取得できない
x86 取得できない
x64 取得OK
上記のアドレスで記載されている情報ではx64とAnyCpuは64ビット環境では同じアドレスを
参照するはずですがなぜか異なる動きをします。
AnyCpuが動かない理由は分かりませんがx64ではインストールパスが取得できたので
x86ビルドで64ビットOS環境でも「SOFTWARE\Microsoft\Office\」を参照するように
出来ればいと思うのですがどうすればよいでしょうか?
.netの機能を使わずにWindowsAPIでレジストリ値を取得するしかないのでしょうか?
どなたか教えていただけないでしょうか?
環境
XP-SP3 VS2005 SP2 .net2.0 "x86" 設定でビルド (仕様によりAnyCPU,x64は使えません。)
Win7 64Bit Office2010(32Bit)で動作確認を行っています。
書いたコード
private void button1_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append(@"SOFTWARE\Microsoft\Office\");
//sb.Append(@"SOFTWARE\Wow6432Node\Microsoft\Office\"); でも変わらず
//sb.Append("10.0");//バージョン(11.0... OfficeXP
sb.Append("14.0");//バージョン(11.0... Office2010
sb.Append(@"\");
sb.Append("Excel");
sb.Append(@"\InstallRoot");
string strReg = "";
strReg = sb.ToString();
sb.Length = 0;
try
{
using (Microsoft.Win32.RegistryKey regkey =
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(strReg, false))
{
//キーが存在しないときは null が返される //Win7 64BitだとNullになる
if (regkey != null)
{
string strPath = (string)regkey.GetValue("Path");
strPath += "EXCEL.EXE";
//指定のEXEが存在するか?
if (File.Exists(strPath))
{
//Ver取得
FileVersionInfo vi = FileVersionInfo.GetVersionInfo(strPath);
sb.AppendLine(" " + vi.ProductName + " " + vi.InternalName + " バージョン:" + vi.FileVersion);
}
}
else
{
MessageBox.Show("regkey=null");
}
}
}
finally
{
}
MessageBox.Show(sb.ToString());
}
よろしくお願いします。
|
|