You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tigervnc.iss.in 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. [Setup]
  2. #ifdef WIN64
  3. ArchitecturesInstallIn64BitMode=x64
  4. AppName=TigerVNC 64-bit
  5. AppVerName=TigerVNC 64-bit @VERSION@ (@BUILD@)
  6. #else
  7. AppName=TigerVNC
  8. AppVerName=TigerVNC v@VERSION@ (@BUILD@)
  9. #endif
  10. AppVersion=@VERSION@
  11. AppPublisher=TigerVNC project
  12. AppPublisherURL=https://tigervnc.org
  13. DefaultDirName={pf}\TigerVNC
  14. #ifdef WIN64
  15. DefaultGroupName=TigerVNC 64-bit
  16. #else
  17. DefaultGroupName=TigerVNC
  18. #endif
  19. LicenseFile=@CMAKE_SOURCE_DIR@\LICENCE.txt
  20. [Dirs]
  21. ; This directory is necessary to prevent the X509 file chooser from causing
  22. ; an error dialog to appear when GetOpenFileName is called by SYSTEM account.
  23. Name: "{sys}\config\systemprofile\Desktop"
  24. [Files]
  25. #ifdef BUILD_WINVNC
  26. Source: "@CMAKE_CURRENT_BINARY_DIR@\win\winvnc\winvnc4.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
  27. Source: "@CMAKE_CURRENT_BINARY_DIR@\win\wm_hooks\wm_hooks.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
  28. Source: "@CMAKE_CURRENT_BINARY_DIR@\win\vncconfig\vncconfig.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
  29. #endif
  30. Source: "@CMAKE_CURRENT_BINARY_DIR@\vncviewer\vncviewer.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
  31. Source: "@CMAKE_SOURCE_DIR@\README.rst"; DestDir: "{app}"; Flags: ignoreversion
  32. Source: "@CMAKE_SOURCE_DIR@\LICENCE.TXT"; DestDir: "{app}"; Flags: ignoreversion
  33. [Icons]
  34. Name: "{group}\TigerVNC Viewer"; FileName: "{app}\vncviewer.exe";
  35. Name: "{group}\Listening TigerVNC Viewer"; FileName: "{app}\vncviewer.exe"; Parameters: "-listen";
  36. #ifdef BUILD_WINVNC
  37. Name: "{group}\VNC Server (User-Mode)\Run VNC Server"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole";
  38. Name: "{group}\VNC Server (User-Mode)\Configure VNC Server"; FileName: "{app}\vncconfig.exe"; Parameters: "-user";
  39. Name: "{group}\VNC Server (Service-Mode)\Configure VNC Service"; FileName: "{app}\vncconfig.exe"; Parameters: "-noconsole -service";
  40. Name: "{group}\VNC Server (Service-Mode)\Register VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-register";
  41. Name: "{group}\VNC Server (Service-Mode)\Unregister VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-unregister";
  42. Name: "{group}\VNC Server (Service-Mode)\Start VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -start";
  43. Name: "{group}\VNC Server (Service-Mode)\Stop VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -stop";
  44. #endif
  45. Name: "{group}\License"; FileName: "write.exe"; Parameters: "LICENCE.TXT"; WorkingDir: "{app}"; Flags: "useapppaths"
  46. Name: "{group}\Read Me"; FileName: "write.exe"; Parameters: "README.rst"; WorkingDir: "{app}"; Flags: "useapppaths"
  47. Name: "{group}\Uninstall TigerVNC"; FileName: "{uninstallexe}"; WorkingDir: "{app}";
  48. #ifdef BUILD_WINVNC
  49. [Tasks]
  50. Name: installservice; Description: "&Register new TigerVNC Server as a system service"; GroupDescription: "Server configuration:";
  51. Name: startservice; Description: "&Start or restart TigerVNC service"; GroupDescription: "Server configuration:";
  52. [Run]
  53. Filename: "{app}\winvnc4.exe"; Parameters: "-register"; Tasks: installservice
  54. Filename: "net"; Parameters: "start winvnc4"; Tasks: startservice
  55. #endif
  56. #ifdef BUILD_WINVNC
  57. [Code]
  58. {--- IShellLink ---}
  59. const
  60. CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}';
  61. SLDF_RUNAS_USER = $2000;
  62. type
  63. IShellLinkW = interface(IUnknown)
  64. '{000214F9-0000-0000-C000-000000000046}'
  65. procedure Dummy;
  66. procedure Dummy2;
  67. procedure Dummy3;
  68. function GetDescription(pszName: String; cchMaxName: Integer): HResult;
  69. function SetDescription(pszName: String): HResult;
  70. function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult;
  71. function SetWorkingDirectory(pszDir: String): HResult;
  72. function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult;
  73. function SetArguments(pszArgs: String): HResult;
  74. function GetHotkey(var pwHotkey: Word): HResult;
  75. function SetHotkey(wHotkey: Word): HResult;
  76. function GetShowCmd(out piShowCmd: Integer): HResult;
  77. function SetShowCmd(iShowCmd: Integer): HResult;
  78. function GetIconLocation(pszIconPath: String; cchIconPath: Integer;
  79. out piIcon: Integer): HResult;
  80. function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult;
  81. function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult;
  82. function Resolve(Wnd: HWND; fFlags: DWORD): HResult;
  83. function SetPath(pszFile: String): HResult;
  84. end;
  85. IShellLinkDataList = interface(IUnknown)
  86. '{45E2B4AE-B1C3-11D0-B92F-00A0C90312E1}'
  87. function AddDataBlock(pDataBlock : DWORD) : HResult;
  88. function CopyDataBlock(dwSig : DWORD; var ppDataBlock : DWORD) : HResult;
  89. function RemoveDataBlock(dwSig : DWORD) : HResult;
  90. function GetFlags(var pdwFlags : DWORD) : HResult;
  91. function SetFlags(dwFlags : DWORD) : HResult;
  92. end;
  93. IPersist = interface(IUnknown)
  94. '{0000010C-0000-0000-C000-000000000046}'
  95. function GetClassID(var classID: TGUID): HResult;
  96. end;
  97. IPersistFile = interface(IPersist)
  98. '{0000010B-0000-0000-C000-000000000046}'
  99. function IsDirty: HResult;
  100. function Load(pszFileName: String; dwMode: Longint): HResult;
  101. function Save(pszFileName: String; fRemember: BOOL): HResult;
  102. function SaveCompleted(pszFileName: String): HResult;
  103. function GetCurFile(out pszFileName: String): HResult;
  104. end;
  105. var
  106. OSVersion: TWindowsVersion;
  107. function InitializeSetup: Boolean;
  108. begin
  109. GetWindowsVersionEx(OSVersion);
  110. Result := True;
  111. end;
  112. procedure SetRunAsUserFlag(Path: String);
  113. var
  114. Obj: IUnknown;
  115. SL: IShellLinkW;
  116. SDL: IShellLinkDataList;
  117. PF: IPersistFile;
  118. Flags: DWord;
  119. begin
  120. Obj := CreateComObject(StringToGuid(CLSID_ShellLink));
  121. SL := IShellLinkW(Obj);
  122. PF := IPersistFile(Obj);
  123. SDL := IShellLinkDataList(Obj);
  124. Path := ExpandConstant(Path);
  125. OleCheck(PF.Load(Path, 0));
  126. OleCheck(SDL.GetFlags(Flags));
  127. OleCheck(SDL.SetFlags(Flags or SLDF_RUNAS_USER));
  128. OleCheck(PF.Save(Path, True));
  129. end;
  130. procedure CurStepChanged(CurStep: TSetupStep);
  131. var
  132. Flags: DWord;
  133. begin
  134. { Post-install actions on Windows Vista and higher:
  135. o Modify Service-Mode start menu commands so they run as administrator.
  136. o Set up the SoftwareSASGeneration system policy so as to allow services to simulate Ctrl+Alt+Del. }
  137. if (CurStep = ssPostInstall) and (OSVersion.Major >= 6) then begin
  138. SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Configure VNC Service.lnk');
  139. SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Register VNC Service.lnk');
  140. SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Unregister VNC Service.lnk');
  141. SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Start VNC Service.lnk');
  142. SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Stop VNC Service.lnk');
  143. if not RegQueryDWordValue(
  144. HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',
  145. 'SoftwareSASGeneration', Flags
  146. ) then Flags := 0;
  147. RegWriteDWordValue(
  148. HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',
  149. 'SoftwareSASGeneration', Flags or 1
  150. );
  151. end;
  152. end;
  153. #endif