2011-05-12 83 views
0

我正在研究c#+ vsto項目。我們使用vsto創建並驗證了excel模板。 我最近發現了1件有趣的事情。爲64位系統創建安裝程序的問題

在32位系統中,軟件被安裝在

C:\ Program Files文件

但64位系統上, 它被安裝在

C: \ Program Files(x86)

當我嘗試

情況一: 在64位系統上打開excel文件(它是在32位系統上創建的)。

情況II: 開口練成在32位系統

文件(這是在64位的系統創建)我得到的系統上的異常。

這是因爲相應的DLL存儲在不同的位置。

爲32位指

C:\ Program Files文件

位和64位是指

C:\程序文件(x86)

有什麼辦法可以強制安裝程序安裝軟件C:\ Program Files文件 64位系統,而不是在Ç安裝它:\ Program Files文件(x86)的

任何幫助嗎?

關於。

回答

2

約定是在64位系統上安裝32位軟件到Program Files (x86)。我認爲你不想將你的32位軟件安裝到Program Files - 這會違背穀物。

至於什麼是修復,我想知道爲什麼Excel認爲你的DLL安裝在Program Files。是否有可能在某處使用硬編碼路徑?


從您對此答案的評論確實看起來您是硬編碼的安裝路徑。這聽起來像在許多方面可能是一個問題。你已經發現了64位操作系統的問題,但是如果你的用戶的系統驅動器是D?如果他們有Windows的本地化版本呢?例如,在德國,程序文件文件夾通常是C:\Programme

從我可以收集的關於如何部署VSTO加載項的內容中,您只需編寫一堆註冊表項,其中包含DLL所在位置的詳細信息。我的猜測是,您目前的位置是硬編碼的,您需要更改安裝程序以根據用戶在安裝VSTO時選擇的位置來編寫位置。

+0

當我在32位系統上安裝我的應用程序並生成模板時,它會在模板中存儲DLL的路徑,但是當我嘗試在64位系統上打開該Excel模板時,它會搜索* Program Files *但該DLL存在於* Program Files(x86)*文件夾中,並且我收到了一個異常,我希望現在清除它。 – 2011-05-12 10:59:25

+1

您應該使用.net中的特殊文件夾類來查找程序文件目錄。即使你把它放在'Program Files'中,如果用戶的系統驅動器是'D',所以程序文件夾是'D:\ Program Files',它可能會失敗。那非本地化名稱的非英語安裝呢?最佳做法是在安裝時說明你的DLL文件的安裝位置,並從那個位置加載它們來編寫註冊表項。 – 2011-05-12 11:02:59

+0

@ David:Excel模板如何從註冊表中找到相應的DLL引用? – 2011-05-17 09:21:51

0

我不知道我完全理解querstion,但不能只使用System.Environment.Is64BitOperatingSystem來查看這是一個64位操作系統嗎?

0

從這個評論....

,當我在32 位系統安裝我的應用程序,並生成在 模板中的DLL的模板,它 用來存儲路徑,但是當我嘗試打開該 的excel模板在64位系統上,它 在程序文件中搜索DLL參考目前 ,但在程序文件(x86) 文件夾中存在DLL是 ,我收到一個異常,我希望 現在清除。

聽起來好像你可能沒有正確使用VSTO,雖然可能有一些我沒有意識到的用法。

使用典型的VSTO插件,外掛程序在EXCEL「Addins」鍵下注冊。無論它是64位還是32位都沒關係,你仍然只有一個(有史以來是可用的)註冊。

當加載Excel時加載項將加載,而不是加載特定模板時加載。

加載模板時,插件通常監視文檔加載,然後根據需要做出反應。

我相信您可以使用VSTO構建一個「每文檔」類型的外掛程序,但是如果您這樣做,那麼Excel將無法在不同安裝類型的Excel中加載文檔,因爲它們不是自動兼容的。

相關問題