日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC编写的程序不能在其他机器上运行的解决方案

發(fā)布時間:2025/3/12 c/c++ 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC编写的程序不能在其他机器上运行的解决方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

有的時候,你在Visual C++上面經(jīng)過好幾個月的辛勤努力,終于將程序編寫完成并且測試完畢,然而當你試圖在客戶的發(fā)布機上運行剛寫好的程序時,有可能會碰到類似下面的錯誤,操作系統(tǒng)告訴你“由于應用程序配置不正確,應用程序未能啟動。重新安裝應用程序可能會糾正這個問題”:

?

?

一般情況下,這個問題都是由于程序不能找到所需要的C運行庫(CRT)而引起的。

?

在Windows XP SP2以后,Windows引入了Side-by-Side執(zhí)行的概念,這個概念本來是.NET提出來的,但是Windows后來將這個概念集成到操作系統(tǒng)層面上來了。大家都應該知道Dll Hell的問題,為了解決Dll Hell的問題,Side-By-Side提出不同版本的dll文件可以同時存在于同一個系統(tǒng)里面,而且依賴于不同版本dll的應用程序在運行的時候可以使用到它當初被編譯生成的dll。前面的話,有點繞,舉個例子:

1.?????????假定你編寫了一個C++程序A,是使用MFC 8.0(這個版本是隨著Visual Studio 2005)發(fā)布的。

2.?????????之后你的機器升級了Visual Studio的版本,從2005升級到2008,2008的MFC庫是9.0版本的,這個時候你的操作系統(tǒng)里面安裝了兩個版本的MFC,分別是8.0和9.0。

3.?????????你在Visual Studio 2008編寫了另外一個C++程序B,B依賴與MFC 9.0。

4.?????????如果你運行程序A的話,操作系統(tǒng)會將MFC 8.0加載到A的進程里面。

5.?????????如果你這時同時運行程序B,操作系統(tǒng)會將MFC 9.0加載到B的進程里面。這就是Side-by-side的執(zhí)行概念。

?

操作系統(tǒng)之所以能夠這樣做,是因為它在加載程序A和B之前,除了查看PE格式里面A和B所依賴的Dll信息,都會查看A和B的manifest文件。Manifest文件保存了Windows可執(zhí)行文件(包括exe和dll文件)要運行起來的環(huán)境設置信息,文件名一般是可執(zhí)行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就應該是notepad.exe.manifest。例外有的程序?qū)anifest文件直接嵌入到可執(zhí)行文件的資源里面了,這也就是為什么有的時候你看不到程序的manifest文件的原因。通常來說,一個manifest文件的內(nèi)容如下(test.exe.manifest文件):

<?xml?version='1.0'?encoding='UTF-8'?standalone='yes'?>

<assembly?xmlns='urn:schemas-microsoft-com:asm.v1'?manifestVersion='1.0'>

?<trustInfo?xmlns="urn:schemas-microsoft-com:asm.v3">

??? <security>

????? <requestedPrivileges>

??????? <requestedExecutionLevel?level='asInvoker'?uiAccess='false'?/>

????? </requestedPrivileges>

??? </security>

?</trustInfo>

?<dependency>

??? <dependentAssembly>

????? <assemblyIdentity?type='win32'?name='Microsoft.VC90.DebugCRT'?version='9.0.21022.8'

????????????????????????processorArchitecture='x86'?publicKeyToken='1fc8b3b9a1e18e3b'?/>

??? </dependentAssembly>

?</dependency>

</assembly>

上面的例子里面,就說明這個程序依賴于CRT 9.0,而且是調(diào)試版的,CPU架構(gòu)是32位的CPU。對于將manifest文件嵌入到資源文件的程序我們也有辦法看到manifest的信息。

1.?????????一種是使用mt.exe(Visual Studio自帶的manifest處理程序):

mt -inputresource:test.exe;#1 /out:test.manifest

2.?????????另外一種是使用dumpbin程序?qū)⒄麄€exe的內(nèi)容打印到一個文件,然后用文本編輯器打開,搜索Assem字符串樣式就能找到manifest信息:

?

解決方案

知道了程序依賴于具體哪一個dll以后,你可以將所依賴的dll拷貝到程序的安裝文件夾里面,以CRT庫綁定失敗為例,介紹解決步驟:

1.?????????從上例中我們知道程序依賴的Microsoft.VC90.DebugCRT庫,版本號是9.0.21022.8,需要32位機器版本的CRT。這個依賴項一般是因為你的程序是調(diào)試版,所以Visual Studio在編譯的時候,將調(diào)試版的CRT加入程序的依賴項。

2.?????????從Visual Studio的安裝文件夾里面將D:"Program Files"Microsoft Visual Studio 9.0"VC"redist"Debug_NonRedist"x86中的Microsoft.VC90.DebugCRT整個文件夾拷貝到應用程序所在的文件夾里面,注意:

a)?????????如果你的程序依賴的是32位的CRT,則要拷貝x86文件夾里面的Microsoft.VC90.DebugCRT文件夾,如果是先x64程序,則要拷貝x64文件夾里面。

b)?????????你需要確定Microsoft.VC90.DebugCRT文件夾里面的Microsoft.VC90.DebugCRT.manifest文件里面保存的版本信息而你程序依賴的版本信息匹配,Microsoft.VC90.DebugCRT.manifest里面的版本信息大版本號一定要一致,小版本號一定要等于或者大于你程序依賴的CRT的小版本號。比如上例中,我們的程序是依賴于CRT 9.0.21022.8,而我們的Microsoft.VC90.DebugCRT.manifest的版本是9.0.30729.1,這樣是可以的;而8.0.30729.1就會有問題。如果大版本號一樣,小版本號不一致的話,一個比較簡單的方案就是修改程序的manifest文件,使其互相匹配就可以了。

3.?????????如果你的程序不是依賴調(diào)試版本的CRT,而是release版本的CRT,直接去微軟的官方網(wǎng)站下載一個crt redist包安裝上就可以了。

總結(jié)

以上是生活随笔為你收集整理的VC编写的程序不能在其他机器上运行的解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久免费大片 | 欧美高清a| 美女在线免费视频 | 国产欧美精品一区二区色综合 | 成人激情电影在线观看 | 国产视频资源 | 91av久久| 日本免费观看视频 | 美女高潮黄又色高清视频免费 | 久久高清免费视频 | 一级黄色录象 | 亚洲图片三区 | 高清乱码免费看污 | 好吊色欧美一区二区三区视频 | 91久久精品国产 | 亚洲最新av | 深夜福利在线播放 | 国产白丝av | 松本一香在线播放 | 视频二区 | 亚洲精品一线二线三线 | 色婷婷激情网 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 精品在线观看一区二区 | 亚州色图欧美色图| 色网综合 | 2022精品国偷自产免费观看 | 日韩经典av | 少妇学院在线观看 | 国产黄色一级片 | 性xxxx搡xxxxx搡欧美 | 女人毛片视频 | 国产精品高潮呻吟久久久 | 国产做受91 | 三级在线观看网站 | 不卡在线一区 | 桃色视频在线 | 婷婷伊人综合中文字幕 | 日本福利视频一区 | 久草中文在线观看 | 黄色小说视频网站 | 欧美成人看片黄a免费看 | 成人午夜淫片免费观看 | 成人娱乐网 | 黄色片视频 | 日韩欧美性视频 | 在线无 | 蜜桃精品一区二区 | 国产一区精品在线观看 | 怡红院成人网 | 一区二区三区日韩欧美 | 日韩欧美久久久 | 亚洲黄色小说图片 | 日本视频在线免费观看 | 久久麻豆精品 | 亚洲天堂2013 | 精品国产一区在线 | 色av网| 污视频在线网站 | 91亚洲国产成人精品一区 | 欧美整片sss | 欧美激情在线一区 | 国产日韩网站 | 少妇自拍视频 | 91蝌蚪视频在线观看 | 成人免费xxxxx在线观看 | chien国产乱露脸对白 | 成人日韩视频 | 国产视频97 | 欧美色图一区二区 | 亚洲乱码久久 | 国产色无码精品视频国产 | 动漫美女被吸乳奶动漫视频 | 国产高清免费视频 | 色免费视频 | 中文字幕精品无 | 国产日韩一区二区三免费高清 | 久久精品人人爽 | 亚洲av无一区二区三区 | 黄色网址在线免费播放 | 91热精品| a毛片毛片av永久免费 | 18视频网站在线观看 | 女女h百合无遮涩涩漫画软件 | 一级黄色片视频 | 欧洲精品二区 | 日韩免费看片 | h片在线观看视频 | 浪漫樱花动漫在线观看免费 | 狂野少女电影在线观看国语版免费 | 欧美私人情侣网站 | 亚洲奶汁xxxx哺乳期 | 国产精品99久久久久久久女警 | 日韩三级在线播放 | 国产在线视频一区 | 国产精品久久久久久亚洲色 | 国产精品无码av无码 | 他揉捏她两乳不停呻吟动态图 | 亚欧在线 |