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.7KB

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