Windows窗体应用程序不能在另一台PC上运行

时间:2014-10-31 01:13:18

标签: c# winforms deployment

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

我注意到的是(经过几个小时查找解决方案),这是关键时刻:

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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:-1)

解决:

问题在于DLL - 使用Dependency Walker我发现我的DLL需要运行msvcr120.dll,甚至将它包含到项目输出文件夹也无济于事,并且msvcr也会导致x84 / x64不匹配错误。重新编译DLL解决了问题:

  

静态链接DLL   确保为Release和Debug解决此问题。步骤略有不同。

     

发布

     

在Visual Studio中,我转到了项目属性。我变了   我的配置发布。我去了配置属性|   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/