2014-10-31 48 views
0

我遇到了一个很大的问题。我正在写一个WFA + C++/CLI DLL应用程序。一切工作正常,直到我不得不将它发送给我的朋友。每次他从bin/debug(+附加的dll和xml文件)执行exe文件时都不会发生任何事情(他没有安装Visual Studio)。这个问题不会发生在我身上。在我的电脑上一切正常。Windows窗体应用程序不能在另一台PC上运行

我注意到什么(后夫妇仰视的解决方案小时)的,不知怎的,这是关键时刻:

log = new StreamWriter("log.txt", true); 
log.WriteLine("3c"); 
log.Close(); 

materialTypeComboBox.SelectedIndex = 0; 

log = new StreamWriter("log.txt", true); 
log.WriteLine("3d"); 
log.Close(); 

“3C”是在每一个我的朋友执行时间我简单的日志文件的最后一行这个。如果我评论此,应用程序崩溃的

foreach (RadioButton item in someGroupBox.Controls.OfType<RadioButton>()) { ... } 

好像WFA的控制会导致效果,但怎么可能? 我尝试了使用installShield项目(在发送应用程序时错过了一些引用),一键安装程序,创建空的时候,将目标框架窗体3.5更改为4.5.1,在Debug和Relase模式下构建项目,x86,x64项目和粘贴源 - 没有任何成功。

这怎么可能?没有例外,没有消息框,什么都没有。只需单击并没有任何反应。 有谁知道一些解决方案?

+2

** A **不程序在启动后立即退出?检查任务管理器。 ** B。**检查事件查看器,系统应该在某处记录日志。 – kennyzx 2014-10-31 01:28:51

回答

1

Windows窗体因其能够静默吞下异常而闻名。我强烈建议记录未处理的异常。记录未处理的异常,请执行下列操作:

Application.ThreadException += new ThreadExceptionEventHandler(UnhandledUIException); 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException); 


private static void UnhandledUIException(object sender, ThreadExceptionEventArgs e) 
{ 
    // Log exception 
} 

private static void UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    // Log exception 
} 

信息:http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx

+0

它有点帮助。现在我意识到,这不是WFA控件的问题,而是我怀疑的问题,但导入了非托管DLL。 – kastelika 2014-10-31 23:20:37

+0

现在的问题是,当我像以前一样调用DLL中启动的方法 - 没有任何反应,但catched exeption说: 无法加载DLL“mydll.dll”(模块无法找到HRESULT:0x8007007E) 但是当我第一次加载整个表单,然后点击按钮调用方法,它没有抛出任何异常,但也没有计算。 – kastelika 2014-10-31 23:37:36

+0

谷歌搜索它,发现通常是x86/x64 DLL /应用冲突,但它不能,因为我使用Win32/x86配置构建每个项目。 还有什么小窍门? – kastelika 2014-10-31 23:38:13

-1

解决:

的问题是与DLL - 与Dependency Walker中我发现我的DLL需要运行msvcr120.dll,甚至包括它到项目输出文件夹没有帮助,而且msvcr导致x84/x64不匹配错误。重新编译DLL解决问题:

静态链接DLL 请确保您解决它的版本和调试。步骤略有不同。

Release

在Visual Studio中,我去了项目Properties。我将我的配置更改为 。我去了配置属性| C/C++ |代码生成查看运行时库设置。它设置为 :多线程DLL(/ MD)将其更改为: 多线程(/ MT)重建。调试几乎与 版本完全相同。

调试

在Visual Studio中,我去项目属性。我将我的 配置更改为调试。我去了配置属性| C/C++ |代码生成查看运行时库设置。它被设置为 这一点:多线程调试DLL(/ MDD),将其更改为这样: 多线程调试(/ MTD)重建调试

http://www.rhyous.com/2010/09/16/avoiding-the-msvcr100-dll-or-msvcr100d-dll/

相关问题