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?
3 answers
W nowszych wersjach Delphi nie jest to już konieczne.
W sekcji opcje projektu, Następnie Aplikacja, znajduje się sekcja 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ć).
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.
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):
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