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


Автор: Tokagero 25.7.2010, 06:12
Доброго времени суток, интересует следующий вопрос:
Как сделать автоматический запуск программы от имени администратора?
В WinXP все было нормально, не так давно перешел на 7 и ознакомился с новыми приколами...
Так вот нужно чтоб программа при старте запускалась от администратора (можно даже со стандартным окошком безопасности)
Так как иначе не получается создать файл на диске. Или нет доступа.

Нашел кучу старых исходников на тему "запуск чужого приложения от имени администратора" со всякими вводами паролей и т.д,
но нужно всего навсего в программе сделать такое требование по умолчанию. Можно? И пойдет ли Delphi 7 для этого? Ведь тогда небыло
Win7 вообще

Автор: xkor 25.7.2010, 13:32
начиная с висты для того чтобы программа запускалась с правами администратора при включенном UAC надо чтобы в манифесте программы присутствовало:
Код

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

тогда при запуске программы винда покажет окно безопасности с вопросов выдавать ли программе права, но вот если UAC отключен то не уверен что права при этом будут получены...
для того чтобы запихнуть в программу манифест можно включить в проект файл "manifest_add.rc" (имя любое, главное расширение rc) со следующим содержанием: "1 24 manifest.xml" (без кавычек)
ну а сам манифест соответственно должен быть в manifest.xml:
Код

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="DelphiApplication"
    version="1.0.0.0"
    processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Да и надо отключить в дельфи включение стандартного манифеста а то наверно конфликтовать будут, в 7ке для этого компонент манифеста удаляем если кинули на форму и удаляем его модуль из uses формы, а в более старших версиях просто отключаем галочку "Enable runtime themes" в секции Application настроек проекта

Автор: Tokagero 25.7.2010, 18:27
Окей а где это впихнуть? Я краем глаза видел нечто подобное но не нашел куда это пихать

Автор: xkor 26.7.2010, 01:24
Tokagero, я вроде написал что куда пихать...

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