Как включить протокол TCP SQL Server Express 2019 с помощью кода C#?C#

Место общения программистов C#
Ответить
Anonymous
 Как включить протокол TCP SQL Server Express 2019 с помощью кода C#?

Сообщение Anonymous »

У меня установлен SQL Server Express 2019 на рабочем столе Windows 11. Я хочу программно включить протокол TCP SQL Server Express из приложения Windows с помощью C#.
Итак, я написал следующий простой код.

Код: Выделить всё

    using Microsoft.SqlServer.Management.Smo.Wmi;

ManagedComputer mc = new ManagedComputer();
ServerProtocol srvprcl = mc.ServerInstances[0].ServerProtocols[2];
srvprcl.IsEnabled = true;
srvprcl.Alter();
Этот код возвращает mc.ServerInstances.count = 0, поэтому в конечном итоге я получаю сообщение об ошибке, хотя этот код выполняется с правами администратора.
Чтобы обойти это, я создал следующий скрипт 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
С разрешением администратора при запуске вручную этот сценарий PowerShell работал хорошо и включал протокол 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);
Здесь я получил ошибку. В ходе расследования я обнаружил, что объект $Wmi возвращает ноль экземпляров ServerInstances.
Когда я запускал сценарий вручную, я получал {SQLEXPRESS} из вывода $Wmi ServerInstances, но этого не происходило. когда тот же сценарий запускается из кода.
Я думаю, что эта проблема будет связана с безопасностью доступа к коду, но не знаю, как ее решить. Любая помощь будет оценена по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/792 ... sharp-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»