异常启用服务FILESTREAM - COMException

时间:2015-05-06 16:01:16

标签: c# sql-server-2008 wmi filestream

此代码应该在SQL服务上启用FILESTREAM。有一个手动过程来做到这一点,但我们真的需要一种自动化的方式。我在另一个帮助网站上找到了此代码。人们已经能够让它工作,但我收到以下错误。

类型' System.Runtime.InteropServices.COMException'的第一次偶然异常。发生在System.Management.dll

 private void EnableFilestream(int accessLevel)
        {
            ManagementObject filestreamSettingsObject = GetFilestreamManagementObject("WIN-D0RFC79OHJ7", "MSSQLSERVER");
            ManagementBaseObject methodArgs = filestreamSettingsObject.GetMethodParameters("EnableFilestream");
            methodArgs["AccessLevel"] = accessLevel;
            methodArgs["ShareName"] = ""; //default

            ManagementBaseObject returnObject = filestreamSettingsObject.InvokeMethod("EnableFilestream", methodArgs, null);

            uint returnValue = (uint)returnObject.GetPropertyValue("ReturnValue");

            const uint errorSuccessRestartRequired = 0x80070BC3;
            if (returnValue != 0 && returnValue != errorSuccessRestartRequired)
            {
                Win32Exception win32Exception = new Win32Exception((int)returnValue);
                string exceptionText =
                        string.Format("'EnableFilestream' method returned {0}: {1}", returnValue, win32Exception.Message);
            }
        }




private ManagementObject GetFilestreamManagementObject(string machineName, string instanceName)
        {
            string managementPath = string.Format(@"\\{0}\root\Microsoft\SqlServer\ComputerManagement10", machineName);
            ManagementScope managementScope = new ManagementScope(managementPath);
            managementScope.Connect();

            SelectQuery query = new SelectQuery("FilestreamSettings", string.Format("InstanceName='{0}'", instanceName));
            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(managementScope, query))
            {
                ManagementObjectCollection moc = searcher.Get();
                if (1 != moc.Count)
                {
                    string exceptionText = String.Format("Expected single instance of FilestreamSettings WMI object, found {0}.", moc.Count);
                }
                ManagementObjectCollection.ManagementObjectEnumerator enumerator = moc.GetEnumerator();

                return (ManagementObject)enumerator.Current;
            }
        }

我认为问题是在线发生的:

  ManagementObjectCollection moc = searcher.Get();

我无法完全确定,因为它实际上并没有使应用程序崩溃。在调试属性中添加此异常也不会导致它中断。" break。"我也以管理员身份运行它。任何帮助表示赞赏。如果您需要更多信息,请告诉我。

0 个答案:

没有答案