Я использую Delphi 5, работающую в Windows 7. У старого приложения, которое мы хотим обновить, теперь есть проблемы с UAC. Мы можем обойти это, изменив настройку EnableLUA в реестре, но это НЕ идеальное решение. Я пытаюсь поднять его и нашел много информации в Интернете о том, как это сделать. Прежде чем связываться с этой программой, я создал очень простую новую программу под названием InstallTester, чтобы использовать ее, чтобы выяснить процесс, который мне нужно использовать, чтобы исправить это. Затем я создал манифест с именем InstallTester.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="InstallTester" 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>
Затем я создал файл .rc (называемый Carrie.rc; сначала я попытался назвать его InstallTester.rc, но у меня появилась ошибка Duplicate Resources, поэтому я изменил его), чтобы включить манифест:
1 24 "InstallTester.manifest"
Затем я скомпилировал файл .rc, используя brcc32.exe, который создал файл .res. Затем я добавил строку, чтобы включить файл .res в app.dpr:
{$R 'Carrie.res'}
Тогда я построил проект. И теперь, когда я запускаю его (вне IDE; внутри IDE я получаю сообщение об ошибке, требующее повышения прав), я не получаю окно Windows, спрашивающее, даю ли я какое-либо разрешение. Вместо этого я получаю приложение плюс окно, которое выглядит как окно командной строки, но без текста. У него есть курсор, но я ничего не могу напечатать:
На всякий случай, если это полезно, вот полный код:
program InstallTester;
{$R *.res}
{$R 'Carrie.res'}
uses
Forms,
InstallTest in 'InstallTest.pas' {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit InstallTest;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg( 'Thanks!', mtInformation, [mbOK], 000 );
end;
end.
У кого-нибудь есть решение?