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.

winvnc.iss.in 6.7KB

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