我們有一個32位混合C/C++應用程序,我們正試圖部署到世界上。它自然使用C和C++運行時DLL。我們使用VS 2005用於32位混合C/C++應用程序的Microsoft程序集配置
通過VS2005構建的清單如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
我們的船這是在同一目錄下的「應用程序」文件,命名爲 (爲保護無辜)「application.exe.manifest」。
從表面上看,這是合理的。但是,在安裝某些 系統,我們得到當「application.exe」啓動消息:
此應用程序未能啓動,因爲應用程序配置是不正確的治療,這是
的一種方式從MSDN運行VCRedist_x86.exe。 (不幸的是, 而我們可以運行它,我們不知道它到底是什麼做的。 這似乎是在的SxS目錄停車的DLL。還有什麼 它能做什麼?)
一)MS文檔似乎表明,大會必須直接有assemblyIdentity 標籤裝配標籤下,名稱應用程序本身。 這在這裏顯然不存在,但是如果我們刪除它,那麼清單似乎在部分工作,即使DLL存在,應用程序也不會啓動。
b)中值得注意的是該組件沒有提及C運行時DLL。我需要手動添加嗎?
c)我們不希望依賴於正確的版本DLL是否存在在目標機器上。假設程序集清楚地說明要使用哪個DLL,那麼我們如何確保我們需要的DLL在目標系統上? (特別是,我們不想運行VCRedist或要求我們的客戶這樣做)。在程序集出現之前,我們通過簡單地將C和C++ DLL放在與應用程序.exe文件相同的目錄中來解決此問題,並且Windows會首先在那裏查找它們。我們仍然可以將C和C++ DLL放在同一個目錄中嗎?我無法從MS文檔中找到我可以找到SxS如何找到合適的相關程序集。
任何幫助表示讚賞。
感謝您的建議。這是一個選項。但我想了解清單的工作原理。 – 2009-11-08 23:37:04