diff --git a/ide/main.pp b/ide/main.pp index 61a42ddca7..a96deb8e7a 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -9832,7 +9832,6 @@ var TargetExeName: String; err : TFPCErrorType; TargetExeDirectory: String; - TargetOS: String; begin if Project1.MainUnitInfo=nil then begin // this project has not source to compile @@ -9984,12 +9983,10 @@ begin // create manifest if Project1.Resources.XPManifest.UseManifest and (Project1.MainUnitID>=0) + and Project1.Resources.XPManifest.NeedManifest(Project1.Resources) then begin - TargetOS:=MainBuildBoss.GetTargetOS(true); - if (TargetOS='win32') or (TargetOS='win64') then begin - Result:=Project1.Resources.XPManifest.CreateManifestFile(TargetExeName); - if not (Result in [mrOk,mrIgnore]) then exit; - end; + Result:=Project1.Resources.XPManifest.CreateManifestFile(TargetExeName); + if not (Result in [mrOk,mrIgnore]) then exit; end; // execute compilation tool 'Before' diff --git a/ide/projectresources.pas b/ide/projectresources.pas index cb60e38eaf..32f77d828f 100644 --- a/ide/projectresources.pas +++ b/ide/projectresources.pas @@ -38,7 +38,7 @@ interface uses Classes, SysUtils, Controls, LCLProc, LResources, FileUtil, Laz_XMLCfg, - ProjectIntf, ProjectResourcesIntf, LazarusIDEStrConsts, + Dialogs, ProjectIntf, ProjectResourcesIntf, LazarusIDEStrConsts, W32VersionInfo, W32Manifest, ProjectIcon, IDEProcs, DialogProcs, CodeToolManager, CodeCache; @@ -598,7 +598,9 @@ procedure TProjectResources.UpdateCodeBuffers; begin if HasSystemResources then - UpdateCodeBuffer(rcFileName, FSystemResources.Text); + UpdateCodeBuffer(rcFileName, FSystemResources.Text) + else if FilenameIsAbsolute(rcFileName) and FileExistsUTF8(rcFileName) then + DeleteFileInteractive(rcFileName,[mbRetry]); if FLrsIncludeAllowed and HasLazarusResources then UpdateCodeBuffer(lrsFileName, FLazarusResources.Text); end; diff --git a/ide/w32manifest.pas b/ide/w32manifest.pas index cd624358a8..4cbea6564c 100644 --- a/ide/w32manifest.pas +++ b/ide/w32manifest.pas @@ -53,6 +53,7 @@ type public function UpdateResources(AResources: TAbstractProjectResources; const MainFilename: string): Boolean; override; function CreateManifestFile(ExeFilename: string): TModalResult; + function NeedManifest(AResources: TAbstractProjectResources): boolean; property UseManifest: boolean read FUseManifest write SetUseManifest; property ManifestName: string read FManifestName; @@ -103,7 +104,7 @@ function TProjectXPManifest.UpdateResources(AResources: TAbstractProjectResource begin Result := True; - if not UseManifest then + if not NeedManifest(AResources) then Exit; SetFileNames(MainFilename); @@ -131,6 +132,21 @@ begin Result:=SaveCodeBuffer(Code); end; +function TProjectXPManifest.NeedManifest(AResources: TAbstractProjectResources + ): boolean; +var + TargetOS: String; +begin + Result:=false; + if not UseManifest then exit; + if AResources.Project=nil then exit; + TargetOS:=AResources.Project.LazCompilerOptions.TargetOS; + if (TargetOS='') or (TargetOS='default') then + TargetOS:=GetDefaultTargetOS; + if (TargetOS<>'win32') and (TargetOS<>'win64') then exit; + Result:=true; +end; + end.