很多时候,当我们将开发好的软件部署到用户的机器上时总会出现各种意想不到的错误,最近在一台原版Windows7系统的电脑上安装VC++运行库的时候,莫名的出现安装失败,然后错误代码为:0x80240037的错误,找了好久才找到解决的办法,那么我们该怎样一步步去找到这个错误,并顺利安装这个呢?
然后我们打开日志文件,找到出错的地方,然后看看这个错误是怎样引起的?
查找整个log文件,找到第一个出现0x80240037的地方,然后找到这句关键的代码:
Applying execute package: Windows7_MSU_x64, action: Install, path: C:ProgramDataPackage Cache54050A5F8AE7F0C56E553F0090146C17A1D2BF8DpackagesPatchx64Windows6.1-KB2999226-x64.msu, arguments: '"C:WindowsSysNativewusa.exe" "C:ProgramDataPackage Cache54050A5F8AE7F0C56E553F0090146C17A1D2BF8DpackagesPatchx64Windows6.1-KB2999226-x64.msu" /quiet /norestart'
也就是安装Windows6.1-KB2999226-x64.msu的时候出错了,然后弹出0x80240037这个错误,关于这个文件是什么类型的暂时先不说明,直接说明怎样才能解决这个问题。
1 在Windows下面全盘搜索Windows6.1-KB2999226-x64.msu这个文件,果然在ProgramData文件夹下面找到了这个文件。
2 搜索到的应该是Windows6.1-KB2999226-x64.msu这个文件,我们将这个文件的后缀名改为.cab文件。
3 然后右键解压到当前文件夹下面,这是会多出几个文件,其中也有一个Windows6.1-KB2999226-x64.cab文件。
4 以管理员身份运行cmd ,输入下面的命令 dism /online /add-package /packagepath:"刚才解压的文件夹下面Windows6.1-KB2999226-x64.cab的位置"
5 点击回车,出现下面的界面,等待执行完毕。
6 部署完毕如果提示需要进行重启,那么重启计算机,然后再重新安装VC++2015运行库。
7 重新安装,然后顺利安装完成。
那么回到这个问题中,我们需要了解几个重要的问题:
1 为什么要安装VC++运行库,而且这个运行库版本众多,有时自己都搞不清楚到底安装哪个版本。
答:运行库是一个经过封装的程序模块,对外提供接口,只要知道接口参数就可以自由使用。如果不使用运行库,每个程序中都会包含很多重复的代码,而使用运行库,可以大大缩小编译后的程序的大小。但另一方面,由于使用了运行库,所以在分发程序时就必须带有这些库,比较麻烦。如果在操作系统中找不到相应的运行库程序就无法运行。为了解决这个矛盾,Windows总是会带上它自己开发的软件的最新的运行库。像Windows 2000以后的版本都包括Visual Basic 5.0/6.0的库。这个是百科中的解释,总之如果C++的代码不是选择静态编译的话就需要对应的VC++运行库的支持。
2 msu文件是什么类型的文件?为什么需要安装这个?
答:.msu文件是微软的独立安装程序,首次安装时需要联网下载特定的.cab更新包,并保存到本地的临时文件夹中,这个文件的名字不需要我们特别关注。一般我们使用wusa.exe来安装.msu程序。由于这个需要进行联网更新操作,所以可能在没有网络的情况下会出现错误,这个是我的猜测。命令格式如下:wusa.exe "X:路径windows10.0-kb3172988-x64_c3f911bf701a57a0423828fec6707b8a0b181453.msu" /quiet /norestart其中,wusa.exe是安装命令,引号中的内容是更新包路径(需根据自己实际情况改写),后面/quiet表示静默安装,/norestart表示无需重启(这些参数可酌情使用)
3 dism命令的作用是什么?
答:部署映像服务和管理 (DISM.exe) 是一个用于更新脱机 Windows® 映像的命令行工具。使用 DISM 脱机安装或删除程序包有以下两种方式。你可以将无人参与的应答文件应用于脱机映像,或可以直接从命令提示符添加或删除程序包。这个是从MSDN上面查到的相关资料,在使用的时候需要按照一定的格式来进行更新,我们使用这个命令是联网去更新一些程序包,然后就能够正确的安装了,至于具体的原因就不太了解了,欢迎对此了解的多发表一下意见,以解决自己的困惑。