jane_wild писал(а):Для Call Library Function Node указала путь C:\Windows\System32
Для системных библиотек не нужно указывать полный путь. Нужно просто ввести
shell32.dll,
сам найдёт указанную библиотеку.
jane_wild писал(а):Далее выбрала упомянутую функцию, указала возвращаемый параметр как Signed 32-bit Integer (boolean там нет :) )
Это верно. Только CLFN должен быть жёлтого цвета (Run in any thread).
jane_wild писал(а):Ну и после вызова проверяла на "больше чем ноль" В скомпилированом файле возвращает всегда false.
Если у вас включен UAC, то нужно явно повышать привилегии пользователя, даже если он состоит в группе "Администраторы". Нажмите ПКМ -> Запуск от имени администратора. Если же UAC в режиме "никогда не уведомлять", но стоит политика на одобрение администратором (по умолчанию активирована), то экзешник всегда будет запускаться с пониженными правами, даже если выберете запуск от администратора. Чтобы экзешник по умолчанию запускался с повышенными правами (elevated), нужно кроме UAC отключить и вот эту опцию:
Пуск -> Выполнить -> gpedit.msc -> Конфигурация Windows -> Параметры безопасности -> Локальные политики -> Параметры безопасности -> Контроль учётных записей: все администраторы работают в режиме одобрения администратором (выставить в "
Отключен" и перезагрузить компьютер).
Примечание: начиная с Windows 8.1 эта политика не отключается автоматом при переводе UAC в режим "никогда не уведомлять", то есть, её нужно отключать вручную.
Хотя, конечно, нужно понимать, что работа из-под полноценного администратора небезопасна, поскольку всем приложениям разрешён полный доступ к системе.
В общем, следуя вышеописанной логике функция IsUserAnAdmin работает исправно (проверил на Win 8.1, думаю, на 10-ке будет то же самое).
Кстати говоря, можно сделать так, чтобы экзешник всегда просил elevation (запрос на повышение прав). Для этого в
в параметрах билда нужно импортировать вот такой манифест:
Код: Выделить всё
<?xml version="1.0" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.1.1.1" processorArchitecture="*" name="Здесь_имя_вашей_программы.exe" type="win32"/>
<description>elevate execution level</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Vitekkz88 писал(а):И куда приятней, нежели чем капашиться в .dll .
Там же ничего сложного, тем более для продвинутого пользователя
Зато работает побыстрее прочих методов. Хотя в конкретном случае скорость не важна. Но всё же.