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