Dodawanie manifestu dla żądania uprawnień administratora

Mam aplikację, która zapisuje ustawienia programu do rejestru systemu windows, który jest absolutnie niezbędny.przechowywanie do pliku nie jest opcją.

Aby to uprościć, chciałbym dać ekran z nagiem "uprawnienia administratora" zamiast próbować wyjaśnić, jak kliknąć prawym przyciskiem myszy plik programu/Skrót.

Znalazłem dość dobry artykuł, ale otrzymuję zduplikowany błąd zasobów po dodaniu własnego pliku zasobów do manifestu.

Wynika to podobno z konflikt z manifestem wewnętrznym i aby rozwiązać problem, widzę wiele komentarzy sugerujących" włącz motywy runtime", aby być wyłączonym w opcjach projektu. Przejrzałem każde menu, ale nie mogę go znaleźć i powiedziano mi, że może nie być dostępne w Delphi 7 i zostało wprowadzone w późniejszych wersjach.

Jak mogę dodać własny manifest?

Author: TLama, 2013-02-05

3 answers

W nowszych wersjach Delphi nie jest to już konieczne.
W sekcji opcje projektu, Następnie Aplikacja, znajduje się sekcja manifestu:

Opcje manifestu
zrzut ekranu z wersji 10.2.1 Tokyo

To automatycznie zajmuje się manifestem XP wspomnianym jako ostrzeżenie w botomie odpowiedzi Kobika .

Nie wiem, z której wersji Delphi to było dostępne.
(Bezpłatnie edytować tę odpowiedź, jeśli wiedzieć).

 0
Author: Jan Doggen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 14:37:42

Już skomentowałem, że "pisanie ustawień programu do rejestru nie jest właściwą przyczyną, aby dać uprawnienia administratora aplikacji". Jednak dobrym pomysłem jest włączenie manifestu UAC w każdym przypadku. wspólny requestedExecutionLevel powinien być level="asInvoker". Zobacz dokumenty

"Q: Adding manifest for admin rights request for delphi 7"

Utwórz poniższe 4 Pliki (2 zestawy):


(tylko UAC)

uac.manifest

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MyApp" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

uac.rc

1 24 "uac.manifest"

(UAC + XP Themes)

uac_xp.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="MyApp" version="1.0.0.0" processorArchitecture="x86"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <!-- Windows Vista application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--Windows 7-->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--Windows Vista-->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    </application>
  </compatibility>   
</assembly>

uac_xp.rc

1 24 "uac_xp.manifest"

Dodaj żądany plik rc(uac.rc lub uac_xp.rc) do projektu poprzez menu "Projekt > Dodaj do projektu". Spowoduje to utworzenie dyrektywy {$R} w pliku projektu:

program Project1;

{.$R 'uac.res' 'uac.rc'} // UAC only
// OR
{$R 'uac_xp.res' 'uac_xp.rc'} // UAC + XP Themes

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Zwróć uwagę na {$R 'uac_xp.res' 'uac_xp.rc'}. Delphi automatycznie skompiluje plik rc do res.

Alternatywnie można skompilować plik rc Poprzez brcc32 uac.rc poza Delphi IDE. a następnie dodaj {$R 'uac_xp.res'} ręcznie do swojego projektu.


Upewnij się, że nie używasz żadnego innego manifestu XP.

 23
Author: kobik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 17:25:05

Jak usunąć manifest "wewnętrzny" z projektu Delphi 7 ?

wewnętrzny manifest był w Delphi 7 razy reprezentowany przez komponent TXPManifest, którego jedynym celem było dodanie jednostki XPMan.pas do klauzuli uses jednostki formularza, w której została ona zrzucona. Ta Jednostka XPMan.pas następnie włączyła plik zasobu z manifestem do wyjścia projektu.

Tak więc, aby usunąć ten manifest wewnętrzny , musisz usunąć wszystkie TXPManifest komponenty z wszystkie formy twojego projektu (jeśli z nich korzystałeś), jak również wszystkie odwołania XPMan używa klauzuli ze wszystkich jednostek twojego projektu.

W skrócie, wykonaj następujące dwa kroki dla wszystkich jednostek projektu (pierwszy krok jest opcjonalny, jeśli nie używałeś TXPManifest komponentów, ale drugi):

Tutaj wpisz opis obrazka

 11
Author: TLama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-05 09:25:56