是否可以通过Microsoft.Office.Interop.Excel.ApplicationClass确定Excel是以32位还是64位运行?
编辑
的解决方案应为Excel 2010和Excel 2007从Excel应用程序对象中查找位(32位/ 64位)?
回答
此代码应该给你的Excel“位数”既工作。
Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
if (System.Runtime.InteropServices.Marshal.SizeOf(app.HinstancePtr) == 8)
{
// excel 64-bit
}
else
{
// excel 32-bit
}
编辑:这里是另一个应该针对以前版本的Excel工作以及版本。只需传递一个ApplicationClass参考:
public static ExcelVersion GetExcelVersion(object applicationClass)
{
if (applicationClass == null)
throw new ArgumentNullException("applicationClass");
PropertyInfo property = applicationClass.GetType().GetProperty("HinstancePtr", BindingFlags.Instance | BindingFlags.Public);
if (property == null)
return ExcelVersion.Excel;
return (System.Runtime.InteropServices.Marshal.SizeOf(property.GetValue(applicationClass, null)) == 8) ? ExcelVersion.Excel2010_64 : ExcelVersion.Excel2010_32;
}
public enum ExcelVersion
{
Excel, // before 2010, so 32 bits
Excel2010_32,
Excel2010_64
}
我也想提出这个问题,但我没有这样做,因为它只适用于Excel 2010. – 2011-05-31 13:18:02
@丹尼尔 - 有没有一种解决方案可以与Excel 2007一起使用。实际上,我的问题的目的是确定我是在运行64位2010还是32位2007.我有一个混合环境。 – SFun28 2011-05-31 13:22:02
我想我可以尝试获取HinstancePtr,如果失败,那么我知道我正在运行32位,因为平台是<2010只有32位?会抛出什么异常?我的程序集是针对14.0进行编译的,但是当我知道2007是在框中时,我在app.config中将程序集重定向到12.0。 – SFun28 2011-05-31 13:26:58
- 1. 32位/ 64位Windows/Linux应用程序
- 2. 从32位应用程序启动64位应用程序?
- 3. Outlook 64位使用从32位应用程序的64位兑换
- 4. 如何找到Android应用程序是32位或64位
- 5. 从32位应用程序启动64位进程?
- 6. 如何从64位进程使用32位COM对象?
- 7. 从32位应用程序调用64位COM控件
- 8. 从64位目标应用程序调用32位lib文件
- 9. 使用SPSite从32位应用程序访问64位SharePoint
- 10. 检查应用程序是建立在32位还是64位?
- 11. 使用64位插件的Excel 32位
- 12. 将asp.net从32位移植到64位webform应用程序
- 13. 是否可以从32位应用程序访问64位dll?
- 14. 从32位应用程序打开64位注册表
- 15. 从32位应用程序访问64位注册表
- 16. 从64位应用程序加载32位共享库?
- 17. 将iOS应用程序从32位升级到64位
- 18. SHGetSpecialFolderPath,如何从32位应用程序访问64位CSIDL
- 19. 在Centos中链接64位应用程序与32位库5.6 64位
- 20. 从32位变为64位
- 21. 从32位到64位
- 22. 64位OS/32位进程
- 23. 如何使用32位进程查找64位进程信息
- 24. iOS 32与64位应用程序
- 25. 如何在64位应用程序中使用win 32位dll
- 26. 在64位应用程序中使用32位库
- 27. 在32位和64位应用程序中使用GDi绘图
- 28. 在32位应用程序中使用64位DLL
- 29. 在64位应用程序中使用32位互操作DLL
- 30. 调用32位或64位程序从启动加载程序
您的意思是您的程序与Excel不在同一个进程中? – 2011-05-31 12:56:34
@Simon - 我不太明白你的问题。 Excel自动进程外,所以没有程序可以在同一个进程中与Excel交谈。如果我有一个ApplicationClass对象(通过Excel互操作),我想知道是否可以确定关联的Excel进程是运行32位还是64位(必须是Excel 2010) – SFun28 2011-05-31 13:00:30
即对象模型是否支持信息关于Excel进程的位数 – SFun28 2011-05-31 13:01:46