Итак, я написал следующий простой код.
Код: Выделить всё
using Microsoft.SqlServer.Management.Smo.Wmi;
ManagedComputer mc = new ManagedComputer();
ServerProtocol srvprcl = mc.ServerInstances[0].ServerProtocols[2];
srvprcl.IsEnabled = true;
srvprcl.Alter();
Чтобы обойти это, я создал следующий скрипт PowerShell.
Код: Выделить всё
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name SqlServer -AllowClobber -Force
Import-Module SQLServer -Force
$wmi = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer
$Wmi
$uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='SQLEXPRESS']/ServerProtocol[@Name='Tcp']"
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $true
$Tcp.Alter()
$Tcp
Потому что мне нужно автоматизировать этот процесс с помощью Код C#, поэтому я написал следующий код и запустил вышеупомянутый сценарий из приложения Windows с административным кодом.
Код: Выделить всё
using System.Diagnostics;
var ps1File = @"C:\scripts\enable_tcp.ps1";
var startInfo = new ProcessStartInfo()
{
Verb = "runas",
FileName = "powershell.exe",
Arguments = $"-NoProfile -ExecutionPolicy ByPass -File \"{ps1File}\"",
UseShellExecute = false
};
Process.Start(startInfo);
Когда я запускал сценарий вручную, я получал {SQLEXPRESS} из вывода $Wmi ServerInstances, но этого не происходило. когда тот же сценарий запускается из кода.
Я думаю, что эта проблема будет связана с безопасностью доступа к коду, но не знаю, как ее решить. Любая помощь будет оценена по достоинству.
Подробнее здесь: https://stackoverflow.com/questions/792 ... sharp-code
Мобильная версия