当我启动我的WPF应用程序并进入InitializeComponent
一个用户控件的函数调用时,它会静默退出并在输出窗口中只留下一条消息,说Managed(v4.0.30319)'已退出代码-1073740771
(0xc000041d
)。当我说“默默地”时,我的意思是即使我用InitializeComponent
- try
块包裹这个catch
调用也没有异常被捕获(这就是我通常找到的问题所在的位置)
这就是我所做的:在这个应用程序项目中,我们需要使用版本号为10.0.4504.0的引用Microsoft.Office.Interop.Owc.dll。由于它是一个互操作库,当我在VS2012中添加此引用时,它会自动将属性Embedded Interop Types
设置为true,我认为这意味着它不会在输出文件夹中保留单个dll,而是将此库嵌入到主输出(至少在我们的其他引用中看起来如此,例如,Microsoft.Office.Interop.Outlook.dll)。但是,当我启动项目时,会抛出一个XamlParseException
说:
“无法加载文件或程序集”Microsoft.Office.Interop.Owc,Version = 10.0.4504.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其中一个依赖项。系统 找不到指定的文件。“:”Microsoft.Office.Interop.Owc,Version = 10.0.4504.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35“”
似乎没有嵌入引用(或者版本不是当前的。但我确认参考版本确实是10.0.4504.0)
接下来,我将此dll直接复制到输出文件夹bin\Debug\
,以确保它可以找到此库。这次没有抛出异常,但整个应用程序只是默默地退出,就像我在开头所描述的那样。我试图谷歌代码-1073740771
(0xc000041d
),但没有关于它的文章。我试图将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 :(得分:1)
当我启动我的WPF应用程序并且当它转到一个用户>控件的InitializeComponent函数调用时,它会静默退出并且只在输出窗口中留下一条消息说Managed (v4.0.30319)'已退出,代码为-1073740771(0xc000041d)。当我说“默默地”时,我的意思是有>即使我用try-catch块包装这个InitializeComponent调用也没有捕获异常(那是>我通常如何找到问题所在的位置)
接下来,我将此dll直接复制到输出文件夹bin \ Debug \,以确保它可以找到此>库。这次没有抛出异常,但整个应用程序只是默默地退出,因为我在开头描述了。我试图谷歌代码-1073740771(0xc000041d),但没有关于它的>文章。我尝试将嵌入式互操作类型设置为true / false,但问题是>相同。
今天我发生的事情完全一样,“已退出代码-1073740771(0xc000041d)。” (这对我来说都发生在VB和C#.NET WinForms应用程序中)。我试过调试,看到我甚至没有进入Form_Load代码块。
我最终通过以管理员身份运行visual studio(然后通过菜单打开和构建并运行项目)来解决这个问题。 这是一个win8安全问题,在任何地方都没有得到很好的解释。 (我分心了,只是直接从我的任务栏/解决方案文件中打开了一个特定的项目,这导致了这种情况发生在我身上。)
你现在可能已经发现了这个,希望你没有失去任何头发:) 只是指出可能在某处发生此错误的其他人。
答案 1 :(得分:0)
还有这个问题,在x64平台上使用代码-1073740771(0xc000041d)的'silent'退出,在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平台做好准备。