使用自编码签名证书进行发布

时间:2020-03-11 17:36:08

标签: vb.net clickonce

我在本主题中进行了多次搜索,但没有走运,我在WPF上有一个应用程序,该应用程序使用“单击一次”发布,因此无法使用Admin Privilege,因此我需要在安装过程中实施一些操作,例如例如,重新启动SQL Server,并且我需要Admin Privilege,并且由于我一旦必须立即删除Admin Privilege就开始使用click进行发布,因此我尝试使用以下代码重新启动我的应用程序以强制使用Admin权限,但没有成功

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 :(得分:0)

我终于设法弄清楚我自己的问题,那是管理员权限。 问题是代码仅需要大约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秒就足够了,但是其他机器需要更多时间,因此为了安全起见,只需像我一样多加几秒钟即可。

谢谢您,并“保持安全”。