Cuando queremos crear nuestro instalador de algún programa y queremos que el acceso directo del escritorio o menú inicio de manera automática al instalar tenga el atributo Ejecutar como Administrador en vez de ponerlo de manera manual en propiedades del acceso directo les comparto este código que a mi me funciono para mi instalador.
[Registry]
; Keys for 32-bit systems
Root: HKCU32; \
Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
ValueType: String; ValueName: "{app}\{#MyAppExeName}"; ValueData: "~ RUNASADMIN"; \
Flags: uninsdeletekeyifempty uninsdeletevalue; Check: not IsWin64
Root: HKLM32; \
Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
ValueType: String; ValueName: "{app}\{#MyAppExeName}"; ValueData: "~ RUNASADMIN"; \
Flags: uninsdeletekeyifempty uninsdeletevalue; Check: not IsWin64
; Keys for 64-bit systems
Root: HKCU64; \
Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
ValueType: String; ValueName: "{app}\{#MyAppExeName}"; ValueData: "~ RUNASADMIN"; \
Flags: uninsdeletekeyifempty uninsdeletevalue; Check: IsWin64
Root: HKLM64; \
Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
ValueType: String; ValueName: "{app}\{#MyAppExeName}"; ValueData: "~ RUNASADMIN"; \
Flags: uninsdeletekeyifempty uninsdeletevalue; Check: IsWin64
Solo agrega este fragmento a tu script de inno setup para que tu icono de acceso directo quede con la opción de Ejecutar como administrador.
Si realmente desea configurar el indicador “Ejecutar como administrador” del acceso directo (como opuesto a forzar la ejecución de la aplicación de destino con privilegios de administrador), puede usar este código de muestra:
[Icons] Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')
[Code] procedure SetElevationBit(Filename: string); var Buffer: string; Stream: TStream; begin Filename := ExpandConstant(Filename); Log('Setting elevation bit for ' + Filename); Stream := TFileStream.Create(FileName, fmOpenReadWrite); try Stream.Seek(21, soFromBeginning); SetLength(Buffer, 1); Stream.ReadBuffer(Buffer, 1); Buffer[1] := Chr(Ord(Buffer[1]) or $20); Stream.Seek(-1, soFromCurrent); Stream.WriteBuffer(Buffer, 1); finally Stream.Free; end; end;
Si te gustaria que compartiéramos mas fragmentos de codigo de ejemplo utiles para el compilador y generador de programas de instalacion inno setup solo dejalo en los comentarios.