是否可以通過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