【问题标题】:Visual Studio - .NET Framework 4.6.1 Issue for users with Windows 8.1 or OlderVisual Studio - 适用于 Windows 8.1 或更早版本的用户的 .NET Framework 4.6.1 问题
【发布时间】:2016-04-23 05:13:23
【问题描述】:

tl;dr - 它只是打开、显示/执行任何内容并关闭任何早于 Windows 10 的设备,因为它在 Windows 10 上运行良好。

自己测试一下:https://dl.dropboxusercontent.com/s/krxhh1515u7wmfn/PRAGMA.exe?dl=1

在 Windows 10 上工作:

不适用于 Windows 10 之前的版本:

(这表明我是否在 4.6.1 中创建了不是包含新方法/函数的表单的启动表单,然后使用 {MainForm}.Show() 调用包含新方法/函数的表单) (Windows 8.1 也是:http://i.imgur.com/FUZFvQf.png

我有一个用 VB.NET 制作的程序,它使用 .NET Framework 4.6.1,因为我认为它的问题最少,但我错了,如果Windows 7/8/8.1 上的任何人都尝试运行我的应用程序,因为它仅在 .NET Framework 4.6.1 上使用某些功能,所以没有任何负载。

我可以确认这是因为使用 .NET Framework 4.6.1 就好像我在 .NET Framework 4.6.1 中加载了一个没有 .NET Framework 4.6.1 中的新功能的表单然后它加载正常,但是如果我加载具有 .ToUnixTimeInMilliseconds() 之类的函数的表单,它加载、显示和执行任何内容,然后关闭。我知道它至少会加载 something,因为当我打开它时,您可以看到窗口焦点消失让我们说 Windows Explorer 到刚刚打开的应用程序,但根本什么都没有执行或显示它最终关闭(我假设)因为我在任务管理器中找不到任何相关进程。

这应该不是问题,Windows 7/8/8.1 可以安装 .NET Framework 4.6.1,为什么它不能在 Windows 7/8/8.1 上加载?

有没有人意识到这个问题,因为我在谷歌上搜索了很长时间,但没有任何相关的东西出现。我错过了什么明显的东西吗?

【问题讨论】:

  • 从您的消息中不清楚您的应用程序的用户是否确实安装了 .NET 4.6.1?是的,Windows 7 和 Windows 8 可以安装 .NET 4.6.1,但这并不意味着它已经自动安装。
  • @Dmitry 我在 TeamViewer 上有另一个用户,当我尝试运行 Web 安装程序时,我们都可以确认已安装 .NET Framework 4.6.1,它说“.NET Framework 4.6.1 或更新版本此系统上已安装版本。”我还有其他 2 个测试我的项目的用户告诉我,它也没有为他们加载,他们也安装了它。
  • 您是否检查过 Windows 事件日志以查看那里为您的程序记录的内容?如果它崩溃了,那么一些调用堆栈信息可以在那里供您分析。如果收集得当,故障转储可以为您提供更多提示。
  • @LexLi 不,因为我没有听说过这样的事情,但是当我加载不同的启动表单并使用 .Show 调用主表单时,它会显示一个带有以下代码的错误框:pastebin.com/raw/9cc2ze5S 你可以在其中看到它调用 UpdateForm 并且打开正常,然后它执行 MainForm.Show() 调用,但最终在打开时由于该表单具有仅在 4.6.1 中出现的功能而导致错误
  • @ShinyMK 这个异常显示了错误类型转换的典型编码问题。我认为这无关紧要,但您可以修复它,然后重试。

标签: c# .net vb.net visual-studio visual-studio-2015


【解决方案1】:

您引用了一个未安装的 ActiveX 组件0x80040154 (REGDB_E_CLASSNOTREG)

Exception object: 02499020
Exception type:   System.Runtime.InteropServices.COMException
Message:          Klasse nicht registriert (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
InnerException:   <none>
StackTrace (generated):
    SP       IP       Function
    00000000 00000001 System_Windows_Forms_ni!System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(System.Guid ByRef, System.Object, Int32, System.Guid ByRef)+0x2
    0037E2A0 6B2B0992 System_Windows_Forms_ni!System.Windows.Forms.AxHost.CreateWithLicense(System.String, System.Guid)+0xc2
    0037E2EC 6B2B0A86 System_Windows_Forms_ni!System.Windows.Forms.AxHost.CreateInstanceCore(System.Guid)+0x2e
    0037E320 6B2B0A45 System_Windows_Forms_ni!System.Windows.Forms.AxHost.CreateInstance()+0x99
    0037E348 6B2B1D63 System_Windows_Forms_ni!System.Windows.Forms.AxHost.GetOcxCreate()+0x17
    0037E354 6B2AEE74 System_Windows_Forms_ni!System.Windows.Forms.AxHost.TransitionUpTo(Int32)+0xc0
    0037E3A0 6B2AE08A System_Windows_Forms_ni!System.Windows.Forms.AxHost.CreateHandle()+0x2a
    0037E3C0 6ACDD215 System_Windows_Forms_ni!System.Windows.Forms.Control.CreateControl(Boolean)+0x75
    0037E3FC 6ACDD2E8 System_Windows_Forms_ni!System.Windows.Forms.Control.CreateControl(Boolean)+0x148
    0037E438 6B2AC785 System_Windows_Forms_ni!System.Windows.Forms.AxHost.EndInit()+0x2d
    0037E444 001E50D2 PRAGMA!PRAGMA.Pragma.InitializeComponent()+0x3a62
    0037EC70 001E0F58 PRAGMA!PRAGMA.Pragma..ctor()+0x1b0

【讨论】:

  • 是的,刚刚确认自己是因为 ActiveX VLC,如果 VLC 本身没有安装在 PC 上,那么它会给出这个错误。我怎样才能缓存/复制activex VLC所需的文件,然后将其放入.exe中,这样如果他们没有安装VLC,它仍然可以工作? (我需要来自 vlc 2.2.1 的文件,而不是最新版本 2.2.2 的文件,因为不管你信不信,它实际上更容易出错)。
  • 尝试将其嵌入为资源,在运行过程中,提取资源并注册 dll/ocx,然后在构造函数中调用 InitializeComponent()。
  • 我正在尝试这样做,但由于某种原因,当我卸载 2.2.2 并安装 2.2.1 以及当我尝试选择项目 > VLC > 拖放时说它无法正确导入:/
  • 将该文件添加到您的项目并配置VS将dll复制到输出文件夹中。在 InitializeComponent() 之前运行 regsvr32.exe 命令注册 dll。
  • 不知道该怎么做,但无论哪种方式,我都刚刚更新回 2.2.2,因为它可以拖放,我在 AxAXVLC 和 AXVLC 上都将它设置为“嵌入互操作类型”,我得到了当我尝试构建时:i.gyazo.com/276367b8a40f4befed034a5e45df9117.png
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多