2010-09-27 127 views
2

我使用C++和Visual Studio 2008開發了一個64位的dll和我想要將其註冊使用「regsvr32.exe的」在目標機器上。我檢查清單文件,它明確指出需要什麼版本的CRT的:VC++ CRT的Redist問題

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' /> 

當我嘗試註冊該文件,我總是得到一個並排方的錯誤消息,指出應用程序設置不正確我應該重新安裝它。

Log Error: Generate Activation Context failed... Reference error message: The referenced assembly is not installed on your system.

目標機器運行Windows XP專業版64位。我試圖安裝相應的VC++可再發行組件包(VC++ 2008的Redist x86x64),創建一個安裝程序,包括相應的合併模塊(microsoft_vc90_crt_x86_x64.msm),安裝所有VC++可再發行組件包等。無論已安裝它總是會失敗。

如果我檢查依賴文件,它們正確位於WinSxS文件夾內,但是如果我在文件上運行Dependency Walker,它也會抱怨從VC9 CRT找不到文件。

如果我建立這將在32位操作系統上正確註冊爲32位的文件。我正在用盡所有的幫助,非常感激。

謝謝,

阿德里安。

編輯 *這是可複製的只有在Win XP 64,所有在Windows 7 64位正常工作。

+1

這應該工作,記錄您的問題更好。複製並粘貼* exact *事件日誌消息,記錄正在使用的* exact * merge模塊。 – 2010-09-27 13:51:04

回答

1

在我已經包括C++重新分發合併模塊的新版本進入設置沿設法解決這個月底全部爲了必要的政策合併模塊來呼叫重定向到任何舊版本到新的一個可用。

這裏最重要的是exe文件可再發行組件包括政策文件和合並模塊不那麼需要對它們進行單獨添加。

1

我在安裝專家,但你有沒有想過分發可再發行的在應用程序的根文件夾?

至於我,我從來沒有聽說過使用regsvr32.exe的安裝CRT REDIST年代。

+0

嗨,在這種情況下在相同的文件夾中部署redis不適用,我沒有使用regsvr32來安裝它們,我使用它來註冊我的dll,因爲它是一個COM組件。 – 2010-09-27 12:53:25

1
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' ... 

它不應該是

<assemblyIdentity type='win64' name='Microsoft.VC90.CRT' ... 

您需要64位運行時

+0

這是有道理的,但清單是由VS產生的,我認爲它應該知道在做什麼。我會嘗試改變它,看看它是如何工作的。 – 2010-09-27 12:59:42

1

聽起來儘管應用程序是64位是在尋找32位的DLL CRT。你嘗試安裝32位可再發行組件包嗎?

這裏是如何跟蹤SideBySide失敗一個很好的說明: http://blogs.msdn.com/b/junfeng/archive/2006/04/14/576314.aspx

+0

是的,我已經安裝了這兩個版本的可重新發布的軟件包,但沒有變化,感謝我在看它的鏈接。 – 2010-09-27 12:57:09