Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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