VC开发的程序如果优雅地提示缺少某个DLL?

dibotiger 2015-07-08 10:45:08
程序的依赖库或则运行库如果缺少.
都回被OS弹窗提示, 感觉既突兀, 也不友好.

我的希望是让程序先运行起来, 用一个相对比较友好的方式提示用户先安装必要的东西.
以前有些文章谈到过类似的需求, 现在翻来翻去找不到. 特来请教.
...全文
205 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2015-07-13
  • 打赏
  • 举报
回复
在你的程序发布的时候,确保其在所有的机器上都能运行。 包含你需要的所有的依赖项。 对于那些需要动态加载的,你可以在动态加载的时候进行操作,从网络下载或者提示用户。
chopin3 2015-07-11
  • 打赏
  • 举报
回复
先启动一个外壳程序,它来分析将要启动软件的PE格式信息,然后自己优雅的提示用户缺少了或者给出尝试解决方案
sumos 2015-07-11
  • 打赏
  • 举报
回复
引用 7 楼 Sandrer 的回复:
1、用外部程序启动,外部程序负责检查动态库或其它所需文件是否存在 2、所有需要用的动态库为动态加载(LoadLibrary),查看返回值是否为空
引用 9 楼 mfmfmmf1 的回复:
HINSTANCE hinst; hinst=::LoadLibraryA("0710A.dll"); typedef int(*ARITHMETIC)(int,int); ARITHMETIC add=(ARITHMETIC)::GetProcAddress(hinst,"add"); //返回函数地址赋给指针 if(!add) { ::AfxMessageBox("获取函数地址失败!"); return; }
通过LoadLibrary来实现有2个问题, 第一,用起来不方便 第二,比如更新失败,dll不是最新版,如此,则GetProcAddress依然成功,但调用可能失败(比如函数参数个数改变)
mfmfmmf1 2015-07-11
  • 打赏
  • 举报
回复
HINSTANCE hinst; hinst=::LoadLibraryA("0710A.dll"); typedef int(*ARITHMETIC)(int,int); ARITHMETIC add=(ARITHMETIC)::GetProcAddress(hinst,"add"); //返回函数地址赋给指针 if(!add) { ::AfxMessageBox("获取函数地址失败!"); return; }
king191923157 2015-07-09
  • 打赏
  • 举报
回复
引用 3 楼 king191923157 的回复:
单独写一个exe,几乎不依赖其他库(系统库除外),功能就是楼主提到的, 检查完整后 再调用(启动)真正的exe
没注意看,和3楼重复了
king191923157 2015-07-09
  • 打赏
  • 举报
回复
单独写一个exe,几乎不依赖其他库(系统库除外),功能就是楼主提到的, 检查完整后 再调用(启动)真正的exe
shenyi0106 2015-07-09
  • 打赏
  • 举报
回复
这个可有提供你一个解决方案: 1. 由一个启动器来启动你的主应用程序,启动器采用标准windows编译,仅仅依赖标准windows库。 2. 在启动器中检测主应用程序所需要的DLL组件(这些组件你是知道的,不要告诉我你不知道,你要是不知道,就是神仙来了也没辙)。检查到不存在的组件时,给出提示或者做任何动作都是你来定的。
sumos 2015-07-09
  • 打赏
  • 举报
回复
如果删除QQ依赖的一个dll,那么QQ会无法启动,不给任何提示。 我的想法是,将依赖的dll和dll的md5的信息保存在一个文件中,程序启动时,检查dll,如果缺少或者md5不匹配,那么就提示用户。
GKatHere 2015-07-09
  • 打赏
  • 举报
回复
加壳, 在壳中检测DLL, 并加载导入表
Sandrer 2015-07-09
  • 打赏
  • 举报
回复
1、用外部程序启动,外部程序负责检查动态库或其它所需文件是否存在 2、所有需要用的动态库为动态加载(LoadLibrary),查看返回值是否为空
zgl7903 2015-07-09
  • 打赏
  • 举报
回复
除了独立的APP检测以外 也可以显式加载DLL, 这样就有机会检测DLL是否加载成功
赵4老师 2015-07-09
  • 打赏
  • 举报
回复
用depends.exe查看exe依赖的dll。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧