2013-03-27 527 views
2

当我启动我的WPF应用程序并且当它进入InitializeComponent函数调用一个用户控件时,它静静地退出并且只在输出窗口中留下一条消息说托管(v4.0.30319)'已退出代码-10737407710xc000041d)。当我说“默默”,我的意思是,如果我把这个包InitializeComponent通话用try也不例外甚至陷入 - catch块(这就是我通常会找到问题的所在)WPF应用程序显示托管已在InitializeComponent调用中退出,代码为-1073740771(0xc000041d)调用

这是我做的:在这个应用程序项目我们需要使用参考Microsoft.Office.Interop.Owc.dll,版本号为10.0.4504.0。由于它是一个互操作库,当我在VS2012中添加这个引用时,它会自动将属性Embedded Interop Types设置为true,我假设它不会将个别dll保留在输出文件夹中,而是将此库嵌入到主输出中(在至少这是它在我们的其他参考文件中的表现方式,例如Microsoft.Office.Interop.Outlook.dll)。然而,当我启动这个项目,它抛出一个XamlParseException俗话说:

“无法加载文件或程序集Microsoft.Office.Interop.Owc,版本= 10.0.4504.0, 文化=中性公钥= 31bf3856ad364e35 '或它的一个依赖 找不到指定的文件系统。 “:” Microsoft.Office.Interop.Owc,版本= 10.0.4504.0, 文化=中性公钥= 31bf3856ad364e35 “”

它似乎该参考没有嵌入(或版本不是正确的,但我确认参考版本确实是10.0.4504.0)

接下来我将此dll直接复制到输出文件夹bin\Debug\,以确保它可以找到此库。这一次不会抛出异常,但是整个应用程序就像我在开始时描述的那样静静地退出。我试图谷歌代码-10737407710xc000041d),但没有关于它的文章。我试图将Embedded Interop Types设置为true/false,但问题是相同的。

更新:

我想在此处添加更多描述。如上所述,有问题的库是OWC(Office Web Component)10。我跟着这个链接使OWC与VB.NET桌面应用程序一起工作:HOW TO: Handle Events for the Office Web Components in Visual Studio .NET。但这篇官方文章太旧了,所以我不得不做很多修改来编译包装器DLL(主要是因为命名空间不匹配)。然后,当我添加对实际互操作库Microsoft.Office.Interop.Owc的引用时,如果我按照默认设置并将嵌入式互操作类型设置为True,则会在运行时抱怨(抛出XamlParseException)程序集无法加载(见上面的描述)。我勒个去?我认为把它作为“嵌入式”可以保证找到这个库。然后我复制这个DLL到输出文件夹,然后我有这个静静地退出问题。但可能值得一提的是,这次输出窗口显示Microsoft.Office.Interop.Owc.dll确实已加载。实际上这是managed has exited消息前的最后一条消息。所以它仍然必须涉及这个图书馆。

所有这些只发生在OWC10中。实际上,在OWC11中也有类似的方法(最新版本,但不幸的是,它与Office2003一起使用时仍然很旧):HOW TO: Handle Events for the Office 2003 Web Components in Visual Studio .NET。但它实际上起作用,控件显示在我的应用程序中。这是因为,我想尝试OWC10代替OWC11

+0

尝试打开所有例外。 – Tomtom 2013-03-27 09:50:07

+0

@Tomtom我已经把所有的异常(我在用户未处理下启用了所有的东西)。另外,就像我之前提到的,我直接使用try-catch块来调用InitializeComponent,并在catch中设置断点,它不能保证异常(如果有的话,我不确定)会被捕获吗? – tete 2013-03-27 10:26:10

+0

这是一个很不起眼的低级别操作系统异常。我猜测你在64位版本的Windows上运行Vista或Win7平台的目标设置为x86,并在输出窗口中看到“第一次机会”异常通知。如果这是一场比赛,那么将这些细节添加到您的问题。 – 2013-03-27 12:07:39

回答

1

当我启动我的WPF应用程序,当它进入到一个用户的InitializeComponent函数调用>控制,它静静地退出,只留下一个消息的一些其他原因在输出窗口中输入“Managed (v4.0.30319)”已退出,代码为-1073740771(0xc000041d)。当我说“默默地”,我的意思是没有异常被捕获,即使我用try-catch块(这是>我通常如何找到问题的地方)包装此InitializeComponent调用

接下来我复制此dll直接到输出文件夹bin \ Debug \,以确保它可以找到这个库。这一次不会抛出异常,但整个应用程序只是在开始时描述的那样静静地退出。我试图谷歌代码-1073740771(0xc000041d),但没有>文章。我试图设置嵌入式互操作类型为真/假,但问题是相同的。

我今天发生了同样的事情,“已退出代码-1073740771(0xc000041d)。” (这发生在VB和C#.NET WinForms应用程序中)。我试过调试,看到我甚至都没有进入Form_Load代码块。

我最终通过以管理员身份运行visual studio(然后通过菜单打开并运行项目&)来“解决”这个问题。 这是一个win8安全问题,在任何地方都没有很好解释。 (我分心了,刚刚打开了一个特定的项目,直接从我的任务栏/解决方案文件,这导致发生在我身上)。

你现在可能已经发现了这一点,希望你没有失去它的任何头发:) 只是指出了可能有这个错误发生在其他地方的其他人。

0

也有这个问题,x64平台上的代码为-1073740771(0xc000041d)的'无声'退出,在x86平台上一切正常。

我的应用程序的一部分是非托管C++,另一部分是C#。事实证明,我的C++代码没有完全准备好用于x64平台。下面的变化,在我的情况下,问题:

// before 
g_OrigWndProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, 
       reinterpret_cast<LONG>(WindowProc))); 

// fixed version 
g_OrigWndProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, 
       reinterpret_cast<LONG_PTR>(WindowProc))); 

所以,一般建议是验证你的代码是完全准备好了x64平台。

相关问题