使用InstallShield(windows)部署的C++应用程序执行错误
Execution error with a C++ application deployed with InstallShield (windows)
我有一个简单的C++程序(带有Boost库的命令行),是在Visual Studio Community 2013下开发的。我想在其他Windows计算机上部署它,所以我正在Visual中测试InstallShield LE(我是InstallShield的新手)。我在当前解决方案中添加了一个InstallShield项目,并成功创建了一个setup.exe
。
当我在另一台计算机上测试它时,设置似乎还可以,但当我尝试应用程序时,我出现了一个奇怪的错误:
MyProgramm.exe --help
发送正确的结果(但不是很有趣)。
MyProgramm.exe -i InputDirectory -o OutputDirectory
失败,Windows显示以下消息:
一个问题导致程序停止正常工作。如果有可用的解决方案,Windows将关闭该程序并通知您。
我错过了什么?
我只构建了Release配置。如何确保我已检查了所有合并模块或InstallShield必备组件?
您必须确定出了什么问题。通常,您描述的症状表示异常导致进程终止。此类异常的一个常见来源是滥用无效指针。
但为什么它在一台电脑上工作,而在另一台电脑却不能?根据代码的不同,它可能是随机的偶发事件。但只要这种情况每次都重复,就更有可能是环境问题。这可能意味着缺少数据文件、注册表项、服务或.dll依赖项。
因为您可以至少以一种方式运行程序,所以您知道它不是静态依赖项。如果是,您会收到一条消息,说无法加载某个文件或其依赖项。但在某些执行路径中,您会看到崩溃。因此,如果它是一个依赖项,它就是InstallShield所说的动态依赖项。我个人并不太喜欢它(我更希望被告知可能需要什么),但有一个动态依赖扫描向导可以帮助识别此类文件并将其包含在项目中。
只有当问题源于这样的事情时,这才会有所帮助:
HMODULE hMod = ::LoadLibrary(TEXT("SomeFunky.dll"));
SOMEPROC proc = (SOMEPROC)::GetProcAddress(hMod, "SomeFunkyProc");
int result = proc(some, args);
或者可能来自COM相关的变体,看起来像这样:
CComPtr<ISomeFace> spSomeFace;
HRESULT hr = spSomeFace.CoCreateInstance(CLSID_SomeFace);
hr = spSomeFace->SomeMethod(some, args);
这里的常见问题是,这两个代码块都不能验证它调用的函数是否可以安全调用。在第一种情况下,proc
(甚至hMod
)可能为空;在第二种情况下,spSomeFace
可能没有成功创建实例。虽然代码可以(也应该)防止这些场景崩溃,但修复崩溃不会让你的应用程序真正执行它应该执行的操作,而且你仍然必须修复过程、dll或实例无法按需初始化的原因。
也有可能您丢失了一个数据文件或注册表项,而该文件或注册表键在某个时候正以不正确的方式使用。例如,代码可能假设数据文件存在,从它读取的数据构建指针,但由于文件不可用而无法正常工作,因此它读取的缓冲区从未真正初始化。
简而言之,为了解决这个问题,如果动态依赖扫描程序不能帮助解决依赖场景,那么您可能必须调试有问题的代码。您可以尝试像Process Monitor这样的工具,并在崩溃前不久查找涉及应用程序的错误。如果你有源代码和符号,你可以试着在WinDbg下运行程序,弄清楚到底是什么崩溃了,然后试着弄清楚为什么它在一个环境中会崩溃,而在另一个环境下不会。但从你已经提供的信息来看,没有人能告诉你答案。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?