Код VB6, чтобы проверить, нужно ли пользователю работать от имени администратора

Некоторые пользователи моего приложения Visual Basic 6 должны «запускаться от имени администратора». Другие этого не делают и могут просто дважды щелкнуть.

Есть ли код, который я могу добавить, когда программа откроется, чтобы проверить, нужен ли запуск от имени администратора, а затем открыть окно, чтобы указать это?


person theMathprof    schedule 28.11.2014    source источник
comment
Что-то вроде упомянутого здесь??vbcity.com/forums/t/138413.aspx   -  person Youbaraj Sharma    schedule 28.11.2014


Ответы (2)


Вам нужно будет использовать API, чтобы определить, имеет ли текущий пользователь административные права или нет.

К счастью, есть одна функция, которая возвращает 0 вместо False, чтобы указать статус текущего пользователя. А именно: IsUserAnAdmin

Вот как его объявить и использовать:

'In a module file:
Public Declare Function IsUserAnAdmin Lib "Shell32" Alias "#680" () As Integer

Затем в вашем Form_Load()

Sub Form_Load()

   If IsUserAnAdmin() = 0 Then 
     MsgBox "Not admin" 
   Else 
     MsgBox "Admin" 
   End If

End Sub

Примечание. Функция оболочки IsUserAnAdmin устарела. . Вы можете заменить функциональность чем-то вроде (псевдокод):

Boolean IsUserAdmin()
{
   PSID administratorsGroup = StringToSid("S-1-5-32-544"); //well-known Administrators group

   Boolean isAdmin;
   if (not CheckTokenMembership(0, administratorsGroup, out isAdmin) then
      isAdmin = false;

   FreeSid(administratorsGroup);

   return isAdmin;
}
person Ahmad    schedule 29.11.2014
comment
Вы хотели бы объявить его общедоступным, а не частным, иначе вы не сможете вызвать его из своей формы (если только вы не завернете его в другую общедоступную функцию). - person Jim Billig; 30.11.2014
comment
@JimBillig Спасибо. я починил это - person Ahmad; 30.11.2014
comment
вы можете объявить его как частное в ваших объявлениях формы - person Hrqls; 01.12.2014

Просто добавьте правильное значение «уровня» в манифест приложения.

Образец фрагмента манифеста:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"
                                     uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo> 

Это приводит к тому, что Windows вызывает приглашение UAC без каких-либо специальных действий со стороны пользователя и без добавления кода. Теперь, когда Windows XP мертва и похоронена, это работает во всех поддерживаемых версиях Windows, за исключением затянувшихся остатков Windows Server 2003, расширенная поддержка которых прекратится через несколько месяцев.

person Bob77    schedule 30.11.2014