2010-04-07 72 views
0

我開發了一個使用com dll兌換的Outlook 2003加載項。我創建了一個visual studio 2008安裝項目,添加了一個自定義操作來運行「caspol.exe -machine -addgroup 1 -strong -hex [key] -noname -noversion FullTrust -n \」Name \「-description \」desc \「和感動下軟件的註冊表鍵HKLM在http://msdn.microsoft.com/en-us/library/cc136646.aspx#AutoDeployVSTOse_InstallingtheAddinforAllUsers描述,以確保所有用戶的兼容性使用COM DLL部署的Outlook 2003加載項安裝項目問題

我包括在vsdrfCOMSelfReg設置的redemption.dll(vsdrfCOM扔一個錯誤)

我的問題是。:當使用管理員帳戶在測試機器上安裝安裝程序時,它在所有用戶下運行良好,但是當我們使用在系統帳戶下運行的全公司軟件部署時,安裝程​​序會執行,但加載項不會加載。安裝一個管理員帳戶再次加載就好了。不應該是一個系統帳戶是否具有安裝所有組件所需的權限?我有什麼選擇? 感謝您的任何建議。

回答

0

經過無休止的夜晚,我終於找出問題所在。它確實是關於代碼訪問安全性和caspol.exe的所有內容 部署Outlook 2003加載項的一些技巧(Outlook 2007是不同的)。 首先,在您的測試客戶端上,確保設置Windows環境變量VSTO_LOGALERTS = 1,因爲這會將加載項的所有錯誤寫入位於目標安裝目錄中的日誌文件。知道如果您的加載項在啓動過程中引發異常,它將在下次啓動Outlook時在註冊表中被禁用(請參閱此處的What can cause Outlook to change a COM-addin's LoadBehavior to 2 - other than unhandled exceptions?),這也很重要。這可能會導致一些混淆,當你不知道它。

現在讓我們繼續討論卡斯波爾問題。請務必首先使用強名稱鍵爲您的組件簽名。接下來,您需要確保您的程序集獲得對客戶端的完全信任。爲此,您可以使用以下設置運行caspol.exe:「caspol.exe -machine -addgroup 1 -strong -hex [key] -noname -noversion FullTrust -n \」Name \「-description \」desc \「 。有了這些論點,你可以給所有使用你的密鑰簽名的程序集,並且完全信任你的機器。這比給整個目錄FullTrust好多了。

在生產環境中,你一定會想要創建一個你可以爲你的安裝項目創建一個自定義動作來自動完成所有的caspol工具,你可以使用這裏提供的示例代碼「http://msdn.microsoft.com/en-us/library/cc136646.aspx#AutoDeployVSTOse_CreatingtheCASPolicy」,但要小心:在caspol參數中檢查-pp 。如果策略更改提示符處於打開狀態,則自動安裝將失敗,因爲它需要用戶進行交互。set -pp off,執行策略並重新設置。再次注意:示例代碼的確如此不等待過程退出。

我明白了所有這些之後,即使對於「所有用戶」安裝,加載項的部署也很容易。希望能幫助任何人。

0

在系統帳戶下運行安裝後,您是否看到HKCR中的Redemption註冊表項?例如。 HKEY_CLASSES_ROOT \ Redemption.RDOSession?

+0

是的,那些鑰匙在那裏。 – hoetz 2010-04-08 07:29:25

+0

我想我找到了。似乎一直是卡斯波爾的命令。使用乾淨的機器,我部署了加載項,並且因爲它沒有工作,我再次手動執行了caspol命令。然後,我以普通用戶身份登錄,並立即開始工作。我會驗證這一點,並在稍後發佈結束答案。 – hoetz 2010-04-08 09:21:39