- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个使用防火墙 COM 库 Interop.NetFwTypeLib
来管理 TCP 传输规则的 Windows 服务。在两台机器上部署不报告问题,但我最近在另一台计算机上安装它并收到异常:
Unable to cast COM object of type 'System.__ComObject' to interface type 'NetFwTypeLib.INetFwRule3'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{B21563FF-D696-4222-AB46-4E89B73AB34A}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))
看完这篇文章后:
我将 STAThreadAttribute
设置为这段代码的 Main 方法来测试我是否解决了问题,但没有任何解决方案:
class Program
{
[STAThread]
static void Main(string[] args)
{
try{
var type = Type.GetTypeFromProgID("HNetCfg.FWRule");
var instance = (INetFwRule3) Activator.CreateInstance(type);
Console.WriteLine("OK");
}
catch (Exception exception){
Console.WriteLine(exception);
}
}
}
令我惊讶的是,我运行这个脚本来查找注册表中的 CLSID,并且在两台计算机上都没有返回任何结果,无论是工作还是不工作。:
reg query HKCR\CLSID | find /i "{B21563FF-D696-4222-AB46-4E89B73AB34A}"
这些是来自运行该服务的计算机的信息:
**OS**
Windows Server 2012 R2 Standard
**FirewallAPI.dll file on Windows/system32**
File version: 6.3.9600.17415
Product version: 6.3.9600.17415
Size: 736 kb
Date modified: 4/28/2015 8:51 PM
来自服务失败的计算机的信息:
**OS**
Windows Server 2011 Service Pack 1
**FirewallAPI.dll file on Windows/system32**
File version: 6.1.7600.16385
Product version: 6.3.7600.16385
Size: 730 kb
Date modified: 7/13/2009 8:51 PM
问题:
最佳答案
感谢@Hans 的评论,我可以写下这个答案。
阅读 MSDN 上的文档后:
我找到了每个接口(interface)支持的最低客户端和服务器。
var osVersion = Environment.OSVersion.Version;
if(osVersion.Major < 6)
throw new Exception("INetFwRule is not available for current OS version. Minimun OS version required is Windows Vista or Windows Server 2008.");
if (osVersion.Major == 6)
{
switch (osVersion.Minor)
{
case 0:
//INetFwRule is available. Windows Server 2008 or Windows Vista
break;
case 1:
//INetFwRule2 is available. Windows 7 or Windows Server 2008 R2
break;
default:
//INetFwRule3 is available. Windows 8.1, Windows Server 2012 R2, Windows 8 or Windows Server 2012.
break;
}
}
else
{
//INetFwRule3 is available. Windows Server 2016 Technical Preview or Windows 10.
}
如果您不需要 INetFwRule2
或 INetFwRule3
的额外功能,您可以在您的应用程序上降级到 INetFwRule
。
关于c# - 无法使用 STAThread 属性转换类型为 'System.__ComObject' 的 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214753/
我正在编写一个 WPF 应用程序,该应用程序对具有简单要求的 API 具有可选依赖项;它必须在没有 STAThread 属性的线程上初始化/使用。当然,WPF 需要 STA,这样一切就变得简单了。 在
最近,当我尝试在 WinForm 中启动 OpenFileDialog 时,我的程序中遇到了与 STA 相关的错误。我已经阅读了一些内容,在将 [STAThread] 属性添加到主线程之前,我想知道它
我为 AutoCAD 编写了托管扩展。当 AutoCAD 加载扩展时,它会启动一些 IExtensionApplication.Initialize() 方法。我需要在应用程序的主 Thread 中启
摘自关于 STAThread 的 MSDN 文章: Indicates that the COM threading model for an application is single-thread
我正在学习 C# 3.5,我想知道 [STAThread] 在我们的程序中做了什么? 最佳答案 STAThreadAttribute 本质上是 Windows 消息泵与 COM 组件通信的要求。虽然核
我不完全理解 STATHREAD 属性的作用 http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx .请看下面的
与奇怪的行为...... 大家好! 谁能解释一下,怎么会这样? 谢谢,亚历克斯。 最佳答案 我仍然觉得链接的答案有点难以接受,特别是因为 OP 承认他实际上没有有一个与 EXE 同名的 DLL。我也无
这是我尝试在我的程序中打开 OpenFileDialog 时收到的错误消息: "Current thread must be set to single thread apartment (STA)
我有一个外部组件 (C++),我想从我的 C# 代码中调用它。 代码是这样的: using System.Text; using System.Threading; using System.Thre
在 Watin 的 source code ,有这段代码: public void NavigateToNoWait(Uri url) { var thread = n
我想测试一个使用剪贴板 (WindowsForms) 的应用程序,我的单元测试中也需要剪贴板。为了使用它,它应该在 STA 模式下运行,但是由于 NUnit TestFixture 没有 main 方
基本上我已经为我的程序制作了一个登录系统,当用户登录时,它会打开 Form1。但我需要 Form1 成为 STA 线程。我在 Form1 中收到此错误: {"Current thread must b
我已经为 C# 控制台应用程序编写了代码。它将剪贴板中的值复制到文件中,并且运行时没有任何错误。 现在我想在另一个带有其他代码的 C# 项目中使用它。 我在 class{} 之后使用 [STAThre
当我们在 Main 中使用 STAThread 时,是否意味着我们不能从 Main 创建新线程? 最佳答案 不,它没有。大多数 UI 应用程序在 STA 线程中启动 - 它不会阻止它们启动新线程。 S
当您使用 Visual Studio 创建一个空的 WinForms 应用程序时,该模板在主应用程序类中具有 STAThread 属性。 我一直在阅读一些关于它的文档,但我不确定我是否完全理解它。 我
我对 C# 还是有点陌生,尤其是 C# 中的线程。我正在尝试启动一个需要单线程单元的函数 (STAThread) 但我无法编译以下代码: 该函数在名为 MyClass 的单独类中如下所示: int
当您使用 Visual Studio 创建一个空的 WinForms 应用程序时,该模板在主应用程序类中具有 STAThread 属性。 我一直在阅读一些关于它的文档,但我不确定我是否完全理解它。 我
我的代码有问题。我想这很简单,但我缺乏 OOP 和 C# 方面的经验,所以我不得不问你。 我的代码是这样的: namespace RR { static class Program {
我是 WPF 的新手,有几个关于 WPF 和 Windows 窗体集成的问题。 我有一个现有的 Visual C# Windows 窗体应用程序。我想将它与 WPF 窗口集成,单击按钮即可显示。这是不
我是 WPF 的新手,在我读过的每个教程中,他们都有一个 [System.STAThread]应用于其 Main 的属性方法,或者他们告诉读者这样做。 这个属性真的是“必需的”吗?如果是这样,为什么?
我是一名优秀的程序员,十分优秀!