此代码应该在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。"我也以管理员身份运行它。任何帮助表示赞赏。如果您需要更多信息,请告诉我。