40
Classes, SysUtils, FileUtil, Process, LCLProc, Controls, Forms,
41
CodeToolManager, LazConf, Laz_XMLCfg, LResources,
40
Classes, SysUtils, FileUtil, Laz2_XMLCfg, Process, LCLProc, Controls, Forms,
41
CodeToolManager, LazConf, LResources,
42
42
ProjectResourcesIntf, resource;
45
TXPManifestExecutionLevel = (
48
xmelRequireAdministrator
45
51
{ TProjectXPManifest }
47
53
TProjectXPManifest = class(TAbstractProjectResource)
55
FExecutionLevel: TXPManifestExecutionLevel;
49
56
FIsDpiaAware: boolean;
50
58
FUseManifest: boolean;
51
59
procedure SetDpiAware(const AValue: boolean);
60
procedure SetExecutionLevel(AValue: TXPManifestExecutionLevel);
61
procedure SetUIAccess(AValue: Boolean);
52
62
procedure SetUseManifest(const AValue: boolean);
54
64
constructor Create; override;
55
function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; override;
65
function UpdateResources(AResources: TAbstractProjectResources; const {%H-}MainFilename: string): Boolean; override;
56
66
procedure WriteToProjectFile(AConfig: {TXMLConfig}TObject; Path: String); override;
57
67
procedure ReadFromProjectFile(AConfig: {TXMLConfig}TObject; Path: String); override;
59
69
property UseManifest: boolean read FUseManifest write SetUseManifest;
60
70
property DpiAware: boolean read FIsDpiaAware write SetDpiAware;
71
property ExecutionLevel: TXPManifestExecutionLevel read FExecutionLevel write SetExecutionLevel;
72
property UIAccess: Boolean read FUIAccess write SetUIAccess;
76
ExecutionLevelToStr: array[TXPManifestExecutionLevel] of String = (
79
'requireAdministrator'
76
94
' <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">'#$D#$A+
77
95
' <security>'#$D#$A+
78
96
' <requestedPrivileges>'#$D#$A+
79
' <requestedExecutionLevel level="asInvoker" uiAccess="false"/>'#$D#$A+
97
' <requestedExecutionLevel level="%s" uiAccess="%s"/>'#$D#$A+
80
98
' </requestedPrivileges>'#$D#$A+
81
99
' </security>'#$D#$A+
82
100
' </trustInfo>'#$D#$A;
103
121
Modified := True;
124
procedure TProjectXPManifest.SetExecutionLevel(AValue: TXPManifestExecutionLevel);
126
if FExecutionLevel = AValue then Exit;
127
FExecutionLevel := AValue;
131
procedure TProjectXPManifest.SetUIAccess(AValue: Boolean);
133
if FUIAccess = AValue then Exit;
106
138
constructor TProjectXPManifest.Create;
108
140
inherited Create;
141
UseManifest := False;
110
142
DpiAware := False;
143
ExecutionLevel := xmelAsInvoker;
113
147
function TProjectXPManifest.UpdateResources(AResources: TAbstractProjectResources;
125
159
Res := TGenericResource.Create(RType, RName);
126
160
RType.Free; //no longer needed
128
ManifestFileData := sManifestFileDataStart;
162
ManifestFileData := Format(sManifestFileDataStart, [ExecutionLevelToStr[ExecutionLevel], BoolToStr(UIAccess, 'true', 'false')]);
130
164
ManifestFileData := ManifestFileData + sManifestFileDataDpiAware;
131
165
ManifestFileData := ManifestFileData + sManifestFileDataEnd;
139
173
TXMLConfig(AConfig).SetDeleteValue(Path+'General/UseXPManifest/Value', UseManifest, False);
140
174
TXMLConfig(AConfig).SetDeleteValue(Path+'General/XPManifest/DpiAware/Value', DpiAware, False);
175
TXMLConfig(AConfig).SetDeleteValue(Path+'General/XPManifest/ExecutionLevel/Value', Ord(ExecutionLevel), 0);
176
TXMLConfig(AConfig).SetDeleteValue(Path+'General/XPManifest/UIAccess/Value', UIAccess, False);
143
179
procedure TProjectXPManifest.ReadFromProjectFile(AConfig: TObject; Path: String);
145
181
UseManifest := TXMLConfig(AConfig).GetValue(Path+'General/UseXPManifest/Value', False);
146
182
DpiAware := TXMLConfig(AConfig).GetValue(Path+'General/XPManifest/DpiAware/Value', False);
183
ExecutionLevel := TXPManifestExecutionLevel(TXMLConfig(AConfig).GetValue(Path+'General/XPManifest/ExecutionLevel/Value', 0));
184
UIAccess := TXMLConfig(AConfig).GetValue(Path+'General/XPManifest/UIAccess/Value', False);