Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Зациклить команду до её получения


Автор: unga 4.6.2019, 19:25
Всем привет!

Подскажите начинаещиму, нужно зациклить команду до ее выполнения.
Команду нужно зациклить на 5 раз, но если команда выполнится с первого раза тогда идем по коду дальше.


Автор: Akina 4.6.2019, 20:57
ЯННП. Попробуйте объяснить другими словами, и более подробно.

Автор: unga 4.6.2019, 22:24
Код нужен на VB6

Sub Main()

программа запрашивает права администратора

CreateObject("Shell.Application").ShellExecute App.Path & "\" & App.EXEName & ".ехе", "1", "", "runas", 1

если отказ запрашивает еще раз и так до 3-5 раза
после чего идет установка программы
но если с первого раза дать права администратора 
программа сразу начинает установку не запрашивая их по новой 

Автор: Akina 5.6.2019, 10:01
Цитата(unga @  4.6.2019,  23:24 Найти цитируемый пост)
если отказ запрашивает еще раз и так до 3-5 раза

И что, после 3-5 запросов соглашается работать и так, без прав администратора?
И что такое в данном случае "отказ"?
Непонятно.

Цитата(unga @  4.6.2019,  23:24 Найти цитируемый пост)
если с первого раза дать права администратора 
программа сразу начинает установку не запрашивая их по новой  

Имеется в виду запуск от имени администратора, или включение текущей учётной записи в группу Администраторы (или иной способ присвоения администраторских привилегий)?

Код на VB6 должен быть таким: программа ПРОВЕРЯЕТ наличие прав администратора. Если они имеются - программа выполняется. Если нет - она запускает свою копию, но с администраторскими привилегиями, а сама завершает работу. Копия при этом получает дополнительный входной параметр, который означает, что это не начальный запуск, и если проверка покажет, что опять нет необходимых прав, она должна сообщить о неустранимой проблеме получения прав администратора и завершить работу.

Проверку можно выполнить, например, используя функцию IsUserAnAdmin из Shell32.

Альтернативно можно создать для программы манифест с установленным requestedExecutionLevel=requireAdministrator. Тогда при запуске запрос повышения уровня привилегий будет выполнен операционной системой.

Автор: unga 5.6.2019, 20:31
Цитата
И что, после 3-5 запросов соглашается работать и так, без прав администратора?

Да, если не удалось после 3-х запросов администратора программа начинает установку без админа прав

Цитата
И что такое в данном случае "отказ"?

отказ - если не дали на разрешения админ прав

Цитата
Имеется в виду запуск от имени администратора, или включение текущей учётной записи в группу Администраторы (или иной способ присвоения администраторских привилегий)?

Просто запуск от имени администратора

Автор: unga 5.6.2019, 22:30
Подскажите как повторить 3-5 раз запрос администратора


Код

Private Declare Function IsUserAnAdmin Lib "shell32" () As Long

Sub Main()

On Error Resume Next

If IsUserAnAdmin() = 0 Then

CreateObject("Shell.Application").ShellExecute App.Path & "\" & App.EXEName & ".exe", "1", "", "runas", 1
   
   Else
   
     MsgBox "Admin"
     
   End If


End Sub


Автор: Akina 6.6.2019, 09:36
Цитата(unga @  5.6.2019,  23:30 Найти цитируемый пост)
как повторить 3-5 раз

Код

Dim count As Integer = 0
Dim flag As Boolean = False

Do
    count = count + 1
    ' action, set flag = True if success
    DoEvents ' recommended
Loop Until flag OR (count = 5)

Автор: unga 6.6.2019, 14:09
Спасибо Akina но у Вас код на VB.NET

подскажите в коде ошибка запрос повторяется 5 раз даже если дать админ права
нужно сделать если админ права есть программа с первого раза покажет "Админ" если нет повторит попытку 5 раз

Код

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 Declare Function IsUserAnAdmin Lib "shell32" () As Long
Sub Main()

If IsUserAnAdmin() = 0 Then
    For i = 1 To 5
        Call bb
        If IsUserAnAdmin <> 0 Then Exit For
    Next i
Else
    MsgBox "Admin"
End If

End Sub

Sub bb()

ShellExecute 0, "runas", App.Path & "\" & App.EXEName & ".exe", Command, vbNullString, 1

End Sub



Автор: Akina 7.6.2019, 07:24
Цитата(unga @  6.6.2019,  15:09 Найти цитируемый пост)
у Вас код на VB.NET

 smile Во блин... а мужики-то не знают...

Добавлено через 7 минут и 47 секунд
Цитата(unga @  6.6.2019,  15:09 Найти цитируемый пост)
в коде ошибка запрос повторяется 5 раз даже если дать админ права

Да с логикой у Вас... вот кто Вам сказал, что если дочернему процессу дать админа, то и родитель станет админом?

Я же вроде вменяемо написал - если не админ, приложение должно перезапускать СЕБЯ от имени АДМИНА.

И с параметрами у ShellExecute напахали... посмотрите описание функции, что ли - нет такой операции как "runas".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)