VB6 的高级凭据 [英] Elevated Credentials for VB6

查看:26
本文介绍了VB6 的高级凭据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在 VB6 应用程序中获得提升的凭据(以启动服务),但前提是用户需要重新启动服务(即我不想在应用程序启动时获得提升的凭据,仅当用户选择重新启动).我怎样才能在 VB6 中做到这一点?

I need to get elevated credentials (to start a service) in a VB6 application, but only if the user needs to restart the service (I.e. I don't want to get elevated credentials whenever the application is started, only when the user selects restart). How can I do this in VB6?

推荐答案

相当简单,但首选方法涉及新的提升过程.本示例使用自身运行与开关来知道执行服务启动而不是正常操作:

Fairly easy, but the preferred way involves a new elevated process. This example uses itself run with a switch to know to perform the Service Start instead of normal operations:

VERSION 5.00
Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "Form1"
   ClientHeight    =   3060
   ClientLeft      =   45
   ClientTop       =   345
   ClientWidth     =   4560
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3060
   ScaleWidth      =   4560
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command1 
      Caption         =   "Start Service"
      Height          =   495
      Left            =   1448
      TabIndex        =   0
      Top             =   1283
      Width           =   1665
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Const BCM_SETSHIELD As Long = &H160C&

Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long

Private Declare Function ShellExecute Lib "shell32.dll" _
    Alias "ShellExecuteA" ( _
    ByVal hWnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()
    ShellExecute hWnd, "runas", App.EXEName & ".exe", "-start", CurDir$(), vbNormalFocus
End Sub

Private Sub Form_Load()
    If UCase$(Trim$(Command$())) = "-START" Then
        Caption = "Starting Service"
        Command1.Visible = False
        'Service starting functionality goes here.
    Else
        Caption = "Service Starter"
        'For Shield to work you must have a Common Controls v. 6
        'manifest and call InitCommonControls before loading
        'this form (i.e. preferably from Sub Main).
        SendMessage Command1.hWnd, BCM_SETSHIELD, 0&, 1&
        Command1.Visible = True
    End If
End Sub

这篇关于VB6 的高级凭据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆