mirror of
https://github.com/kasmtech/KasmVNC.git
synced 2024-12-01 04:23:22 +01:00
173 lines
6.9 KiB
Plaintext
173 lines
6.9 KiB
Plaintext
[Setup]
|
|
#ifdef WIN64
|
|
ArchitecturesInstallIn64BitMode=x64
|
|
AppName=KasmVNC 64-bit
|
|
AppVerName=KasmVNC 64-bit @VERSION@ (@BUILD@)
|
|
#else
|
|
AppName=KasmVNC
|
|
AppVerName=KasmVNC v@VERSION@ (@BUILD@)
|
|
#endif
|
|
AppVersion=@VERSION@
|
|
AppPublisher=KasmVNC project
|
|
AppPublisherURL=http://kasmweb.com
|
|
DefaultDirName={pf}\KasmVNC
|
|
#ifdef WIN64
|
|
DefaultGroupName=KasmVNC 64-bit
|
|
#else
|
|
DefaultGroupName=KasmVNC
|
|
#endif
|
|
LicenseFile=@CMAKE_SOURCE_DIR@\LICENSE.txt
|
|
|
|
[Dirs]
|
|
; This directory is necessary to prevent the X509 file chooser from causing
|
|
; an error dialog to appear when GetOpenFileName is called by SYSTEM account.
|
|
Name: "{sys}\config\systemprofile\Desktop"
|
|
|
|
[Files]
|
|
#ifdef BUILD_WINVNC
|
|
Source: "@CMAKE_CURRENT_BINARY_DIR@\win\winvnc\winvnc4.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
|
|
Source: "@CMAKE_CURRENT_BINARY_DIR@\win\wm_hooks\wm_hooks.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
|
|
Source: "@CMAKE_CURRENT_BINARY_DIR@\win\vncconfig\vncconfig.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
|
|
#endif
|
|
Source: "@CMAKE_CURRENT_BINARY_DIR@\vncviewer\vncviewer.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace;
|
|
Source: "@CMAKE_SOURCE_DIR@\README.md"; DestDir: "{app}"; Flags: ignoreversion
|
|
Source: "@CMAKE_SOURCE_DIR@\LICENSE.TXT"; DestDir: "{app}"; Flags: ignoreversion
|
|
|
|
|
|
[Icons]
|
|
Name: "{group}\KasmVNC Viewer"; FileName: "{app}\vncviewer.exe";
|
|
Name: "{group}\Listening KasmVNC Viewer"; FileName: "{app}\vncviewer.exe"; Parameters: "-listen";
|
|
|
|
#ifdef BUILD_WINVNC
|
|
Name: "{group}\VNC Server (User-Mode)\Run VNC Server"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole";
|
|
Name: "{group}\VNC Server (User-Mode)\Configure VNC Server"; FileName: "{app}\vncconfig.exe"; Parameters: "-user";
|
|
|
|
Name: "{group}\VNC Server (Service-Mode)\Configure VNC Service"; FileName: "{app}\vncconfig.exe"; Parameters: "-noconsole -service";
|
|
Name: "{group}\VNC Server (Service-Mode)\Register VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-register";
|
|
Name: "{group}\VNC Server (Service-Mode)\Unregister VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-unregister";
|
|
Name: "{group}\VNC Server (Service-Mode)\Start VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -start";
|
|
Name: "{group}\VNC Server (Service-Mode)\Stop VNC Service"; FileName: "{app}\winvnc4.exe"; Parameters: "-noconsole -stop";
|
|
#endif
|
|
Name: "{group}\License"; FileName: "write.exe"; Parameters: "LICENSE.TXT"; WorkingDir: "{app}"; Flags: "useapppaths"
|
|
Name: "{group}\Read Me"; FileName: "write.exe"; Parameters: "README.md"; WorkingDir: "{app}"; Flags: "useapppaths"
|
|
Name: "{group}\Uninstall KasmVNC"; FileName: "{uninstallexe}"; WorkingDir: "{app}";
|
|
|
|
#ifdef BUILD_WINVNC
|
|
[Tasks]
|
|
Name: installservice; Description: "&Register new KasmVNC Server as a system service"; GroupDescription: "Server configuration:";
|
|
Name: startservice; Description: "&Start or restart KasmVNC service"; GroupDescription: "Server configuration:";
|
|
|
|
[Run]
|
|
Filename: "{app}\winvnc4.exe"; Parameters: "-register"; Tasks: installservice
|
|
Filename: "net"; Parameters: "start winvnc4"; Tasks: startservice
|
|
#endif
|
|
|
|
#ifdef BUILD_WINVNC
|
|
[Code]
|
|
|
|
{--- IShellLink ---}
|
|
|
|
const
|
|
CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}';
|
|
SLDF_RUNAS_USER = $2000;
|
|
|
|
type
|
|
IShellLinkW = interface(IUnknown)
|
|
'{000214F9-0000-0000-C000-000000000046}'
|
|
procedure Dummy;
|
|
procedure Dummy2;
|
|
procedure Dummy3;
|
|
function GetDescription(pszName: String; cchMaxName: Integer): HResult;
|
|
function SetDescription(pszName: String): HResult;
|
|
function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult;
|
|
function SetWorkingDirectory(pszDir: String): HResult;
|
|
function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult;
|
|
function SetArguments(pszArgs: String): HResult;
|
|
function GetHotkey(var pwHotkey: Word): HResult;
|
|
function SetHotkey(wHotkey: Word): HResult;
|
|
function GetShowCmd(out piShowCmd: Integer): HResult;
|
|
function SetShowCmd(iShowCmd: Integer): HResult;
|
|
function GetIconLocation(pszIconPath: String; cchIconPath: Integer;
|
|
out piIcon: Integer): HResult;
|
|
function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult;
|
|
function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult;
|
|
function Resolve(Wnd: HWND; fFlags: DWORD): HResult;
|
|
function SetPath(pszFile: String): HResult;
|
|
end;
|
|
|
|
IShellLinkDataList = interface(IUnknown)
|
|
'{45E2B4AE-B1C3-11D0-B92F-00A0C90312E1}'
|
|
function AddDataBlock(pDataBlock : DWORD) : HResult;
|
|
function CopyDataBlock(dwSig : DWORD; var ppDataBlock : DWORD) : HResult;
|
|
function RemoveDataBlock(dwSig : DWORD) : HResult;
|
|
function GetFlags(var pdwFlags : DWORD) : HResult;
|
|
function SetFlags(dwFlags : DWORD) : HResult;
|
|
end;
|
|
|
|
IPersist = interface(IUnknown)
|
|
'{0000010C-0000-0000-C000-000000000046}'
|
|
function GetClassID(var classID: TGUID): HResult;
|
|
end;
|
|
|
|
IPersistFile = interface(IPersist)
|
|
'{0000010B-0000-0000-C000-000000000046}'
|
|
function IsDirty: HResult;
|
|
function Load(pszFileName: String; dwMode: Longint): HResult;
|
|
function Save(pszFileName: String; fRemember: BOOL): HResult;
|
|
function SaveCompleted(pszFileName: String): HResult;
|
|
function GetCurFile(out pszFileName: String): HResult;
|
|
end;
|
|
|
|
var
|
|
OSVersion: TWindowsVersion;
|
|
|
|
function InitializeSetup: Boolean;
|
|
begin
|
|
GetWindowsVersionEx(OSVersion);
|
|
Result := True;
|
|
end;
|
|
|
|
procedure SetRunAsUserFlag(Path: String);
|
|
var
|
|
Obj: IUnknown;
|
|
SL: IShellLinkW;
|
|
SDL: IShellLinkDataList;
|
|
PF: IPersistFile;
|
|
Flags: DWord;
|
|
begin
|
|
Obj := CreateComObject(StringToGuid(CLSID_ShellLink));
|
|
SL := IShellLinkW(Obj);
|
|
PF := IPersistFile(Obj);
|
|
SDL := IShellLinkDataList(Obj);
|
|
Path := ExpandConstant(Path);
|
|
OleCheck(PF.Load(Path, 0));
|
|
OleCheck(SDL.GetFlags(Flags));
|
|
OleCheck(SDL.SetFlags(Flags or SLDF_RUNAS_USER));
|
|
OleCheck(PF.Save(Path, True));
|
|
end;
|
|
|
|
procedure CurStepChanged(CurStep: TSetupStep);
|
|
var
|
|
Flags: DWord;
|
|
begin
|
|
{ Post-install actions on Windows Vista and higher:
|
|
o Modify Service-Mode start menu commands so they run as administrator.
|
|
o Set up the SoftwareSASGeneration system policy so as to allow services to simulate Ctrl+Alt+Del. }
|
|
if (CurStep = ssPostInstall) and (OSVersion.Major >= 6) then begin
|
|
SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Configure VNC Service.lnk');
|
|
SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Register VNC Service.lnk');
|
|
SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Unregister VNC Service.lnk');
|
|
SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Start VNC Service.lnk');
|
|
SetRunAsUserFlag('{group}\VNC Server (Service-Mode)\Stop VNC Service.lnk');
|
|
if not RegQueryDWordValue(
|
|
HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',
|
|
'SoftwareSASGeneration', Flags
|
|
) then Flags := 0;
|
|
RegWriteDWordValue(
|
|
HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System',
|
|
'SoftwareSASGeneration', Flags or 1
|
|
);
|
|
end;
|
|
end;
|
|
#endif
|