问题描述
我有一个将框架4.5.2升级到框架4.8的工作Windows服务。但是现在由于出现以下错误而导致该服务不再起作用:System.ApplicationException:CoIntializeSecurity失败,错误0x80010119
这是在4.5.2下可运行的代码,但在4.8下则不再可用
public Service()
{
// Initialize COM security
UInt32 hResult = COMNative.CoInitializeSecurity(
IntPtr.Zero,// Add your security descriptor here
-1,IntPtr.Zero,COMNative.RPC_C_AUTHN_LEVEL_PKT_PRIVACY,COMNative.RPC_C_IMP_LEVEL_IDENTIFY,COMNative.EOAC_disABLE_AAA | COMNative.EOAC_SECURE_REFS |
COMNative.EOAC_NO_CUSTOM_MARSHAL,IntPtr.Zero);
if (hResult != 0)
throw new ApplicationException(
"CoIntializeSecurity Failed w/err 0x" + hResult.ToString("X"));
}
/// <summary>
/// Called when [start].
/// </summary>
/// <param name="args">The arguments.</param>
public void OnStart(string serviceName)
{
ILogger logger = LoggerService.GetLogger();
logger.Info("*** START OF SERVICE ***");
logger.Info(serviceName + " (Version " + Assembly.GetExecutingAssembly().GetName().Version.ToString() + ") starting ....");
Guid clsidsqlEventObj = new Guid(ComponentClassId);
// Register the sqlEvent class object on start
UInt32 hResult = COMNative.CoRegisterClassObject(
ref clsidsqlEventObj,new sqlEventClassFactory(),COMNative.CLSCTX_LOCAL_SERVER,COMNative.REGCLS_MULTIPLEUSE,out _cookiesqlEventObj);
if (hResult != 0)
throw new ApplicationException(
"CoRegisterClassObject Failed w/err 0x" + hResult.ToString("X"));
}
我们已经尝试了多种安全设置,但没有任何运气。
有人知道4.5.2和4.8有什么区别吗?在这种情况下,为什么它不再起作用了?
解决方法
我终于设法解决了这个问题。 我将CoInitialize从服务类构造函数移至Main方法,并将其设置为启动时要做的第一件事,从而解决了该问题。
使用4.5.2和4.8时,服务构造函数的初始化似乎存在时间差异。我进行了很多搜索,但找不到这两个版本之间的确切变化。
如果有人对此有所了解,我仍然有兴趣将其广为人知;-)