程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> win10下vs2015編譯的程序如何運行在win7等系統(無需安裝Redistributable),編譯系統透視pdf

win10下vs2015編譯的程序如何運行在win7等系統(無需安裝Redistributable),編譯系統透視pdf

編輯:C++入門知識

win10下vs2015編譯的程序如何運行在win7等系統(無需安裝Redistributable),編譯系統透視pdf


最近新寫的程序要做beta測試,在做綠色版(免安裝版)時遇到了問題,vs2015做的項目本以為像之前的vs版本一樣把msvcrXXX.dll還有另外幾個運行時庫都放到exe旁邊即可,然並卵。。。,在win7的測試機上還會提示找不到這個dll:api-ms-win-crt-runtime-l1-1-0.dll,如下圖

繼續找到這個dll拷到exe旁,坑爹的一幕放生了,竟然提示那個dll有問題——無法定位程序輸入點ucrtbase.terminate。。。

難道是版本不對,我機器上是有幾個不同大小的api-ms-win-crt-runtime-l1-1-0.dll,都試了下,還是不行,這就沒處說理了。。。然後谷歌了下,都是說要裝vs2015 Redistributable或者KB2999226的更新(Win10通用CRT,不是win10的,是其他win7等系統的更新用來支持通用crt的程序),試著裝了下Redistributable包竟然裝到一半報未定義的錯誤(0x80240017)。。。O(≧口≦)O,而且這也背離了綠色版的初衷,繼續研究吧。

後來注意到api-ms-win-crt-runtime-l1-1-0.dll同目錄下有一堆api-xxx的dll,可能都是有聯系的,索性整個目錄所有dll全都拷到exe旁了,竟然可以啟動了 O(∩_∩)O

注意:我用的是win10 sdk中的dll,具體目錄在C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86  ,不同機器目錄可能略有不同。另外我的程序是32位,所以是x86文件夾的,如果是64位等可以用Windows Kits\10\Redist\ucrt\DLLs下的對應文件夾的dll

 

仔細一看拷過去的dll中還有一個叫ucrtbase.dll,難道和入口點那個報錯有關系,刪了後確實又報第二個截圖的錯誤了。。。好坑爹呀,為什麼別人都是報丟失dll,就你是報找不到入口點呢(而且還是另一個已存在的dll),害得我糾結了這麼久,不管怎麼樣終於找到制作vs2015程序綠色版的正確姿勢了——除了以往的msvc運行時庫的多個dll外,還要把win10通用crt相關的多個dll都放到exe旁才可以。

 

後記:用procexp又看了下綠色版程序在win10機器上加載dll的列表,竟然沒有api-xxx那堆dll,一個都沒有,看來那些dll確實只是用於其他系統運行win10通用crt程序的,win10本身因為做了原生支持所以就不需要加載那些dll了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved