Использование собственных сертификатов подписи кода для целей Publi sh - PullRequest
0 голосов
/ 11 марта 2020

Я много раз искал в этой теме c, но безуспешно, у меня есть приложение на WPF, которое использует Click Once для публикации, и поэтому я не могу использовать привилегии администратора, и мне нужно выполнить некоторые действия в Процесс установки, такой как перезапуск SQL сервера, например, для этого мне нужны привилегии администратора, и, поскольку я начинаю публиковать, нажимая один раз, когда мне нужно было удалить привилегии администратора, я попытался перезапустить приложение, чтобы заставить права администратора использовать следующий код, но не сделал работа

Public Function IsRunAsAdmin() As Boolean
    Try
        Dim id As WindowsIdentity = WindowsIdentity.GetCurrent()
        Dim principal As WindowsPrincipal = New WindowsPrincipal(id)
        Return principal.IsInRole(WindowsBuiltInRole.Administrator)
    Catch __unusedException1__ As Exception
        Return False
    End Try
End Function

Public Sub AdminRelauncher()
    If Not IsRunAsAdmin() Then
        Dim proc As ProcessStartInfo = New ProcessStartInfo()
        Dim procExecuting As New Process
        proc.UseShellExecute = True
        proc.WorkingDirectory = Environment.CurrentDirectory
        proc.FileName = Assembly.GetEntryAssembly().CodeBase
        proc.Verb = "runas"
        Try
            procExecuting = Process.Start(proc)
            Application.ExitThread()
            Application.Exit()
        Catch ex As Exception
            Console.WriteLine("This program must be run as an administrator! " & vbLf & vbLf & ex.ToString())
        End Try
    End If
End Sub

Я все еще получаю сообщение об ошибке "Не удается открыть MSSQL $ ****** на компьютере" после того, как я искал, конечно, я обнаружил, что причина - права администратора. Так что теперь я работаю над сертификатами подписи кода, так как кто-то посоветует мне, что это будет работать для меня. но я частное лицо, и цена моего приложения недостаточно высока, чтобы купить платный сертификат, поэтому мне было интересно, смогу ли я сделать собственный сертификат подписи кода и использовать его одним щелчком мыши. Спасибо.

1 Ответ

0 голосов
/ 19 марта 2020

Мне, наконец, удалось выяснить проблему, я сам, это были права администратора. Проблема заключалась в том, что для выполнения кода требовалось всего 2-3 мили секунды, поэтому, когда я отслеживал код, я обнаружил, что мой код действительно смог остановить службу, но не смог запустить его снова, поскольку это не заняло времени для полной остановки службы.

Решение было простым, поскольку после выполнения кода для остановки службы потребовалось всего несколько секунд.

Так что просто нужно добавить код между , Сначала

Imports System.Threading

Затем используйте код следующим образом

Dim service As ServiceController = New ServiceController("SQL Server (SQLEXPRESS)")
                    service.Stop()
                    Thread.Sleep(10000)
                    service.Start()

Вы видите код, где Thread.sleep заставляет приложение ждать 10 секунд, прежде чем оно завершит выполнение кода.

Это время зависит от самой машины, 2-3 се c было достаточно, но какой-то другой машине требовалось больше времени, поэтому, чтобы быть в безопасности, просто добавьте больше секунд, как я.

Спасибо, и "Будьте в безопасности".

...