当前位置: 首页 > 文档资料 > WinSCP 手册文档 >

Custom Distribution

优质
小牛编辑
130浏览
2023-12-01

This chapter includes hints for those who want to prepare custom distribution of WinSCP with own configuration (typically preconfigured sites).

WinSCP uses Inno Setup as installer. The most simple Inno Setup script for WinSCP may look like the one below. For full WinSCP install script see file deployment/winscpsetup.iss in the source code.

[Setup]
; Name of the application
AppName=WinSCP (provided by Some Company)
; Name of the application including version
AppVerName=WinSCP 5.0
; Installation directory (can be changed by user)
DefaultDirName={pf}\WinSCP
; Start menu group name
DefaultGroupName=WinSCP (provided by Some Company)
; Not to allow installation while WinSCP is running
AppMutex=WinSCP
 
[Files]
; Install WinSCP itself
Source: "WinSCP.exe"; DestDir: "{app}"; \
  Flags: ignoreversion
; It is recommended (especially for not experienced users) to install
; drag&drop shell extension
Source: "DragExt.dll"; DestDir: "{app}"; \
  Flags: regserver restartreplace uninsrestartdelete
 
[Icons]
; Start menu icon
Name: "{group}\WinSCP"; Filename: "{app}\WinSCP.exe"
; Desktop icon
Name: "{userdesktop}\WinSCP"; Filename: "{app}\WinSCP.exe"
 
[Registry]
#define RegistryKey "Software\Martin Prikryl\WinSCP 2"
; Make Explorer interface initial setting
; (recommended especially for not experienced users)
; Remove or use value 0 for Commander interface
Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; \
  ValueName: "Interface"; ValueData: 1
; Enable using of drag&drop shell extension
; (and make sure it is disabled again when the extension is uninstalled)
Root: HKCU; SubKey: "{#RegistryKey}\Configuration\Interface"; ValueType: dword; \
  ValueName: "DDExtEnabled"; ValueData: 1; \
  Flags: uninsdeletevalue
 
[Run]
; Offer starting WinSCP after installation
Filename: "{app}\WinSCP.exe"; Description: "Launch &WinSCP"; \
  Flags: nowait postinstall skipifsilent
 
[UninstallRun]
; Offer configuration cleanup on uninstallation
Filename: "{app}\WinSCP.exe"; Parameters: "/UninstallCleanup"; \
  RunOnceId: "UninstallCleanup"

Save the script into file (e.g. winscpsetup.iss), put files WinSCP.exe and DragExt.dll to the same directory and run Inno Setup compiler:

iscc winscpsetup.iss

You may have the installer pre-configure sites, to make it easier for your users to connect to your server.

The easiest way is to configure the session using GUI and then check the configuration storage to see how WinSCP stores the site settings. Then add corresponding commands to the installer script.

Simple example of “Server” session configuration, including hostname and username only, is shown below. You can also use hidden option Special to prevent user from accidentally deleting or modifying the session.

[Registry]
#define RegistryKey "Software\Martin Prikryl\WinSCP 2"
; Configure hostname/username
Root: HKCU; SubKey: "{#RegistryKey}\Sessions\Server"; ValueType: string; \
  ValueName: "HostName"; ValueData: "example.com"
Root: HKCU; SubKey: "{#RegistryKey}\Sessions\Server"; ValueType: string; \
  ValueName: "UserName"; ValueData: "customer"
; Prevent user from accidentally deleting or modifing the session
Root: HKCU; SubKey: "{#RegistryKey}\Sessions\Server"; ValueType: dword; \
  ValueName: "Special"; ValueData: 1

Instead of modifying the registry from install script you can make the installer create configuration INI file.

You can also have the installer install the embedded INI file, like:

[Configuration\Interface]
Interface=1
 
[Sessions\Server]
HostName=example.com
UserName=customer
Special=1

While not recommended, you can distribute even session passwords. By default the password needs to be stored in encrypted form to option Password. You can store the password from GUI to get the correct encrypted form (note that key for encryption is hostname and username, so the encrypted password cannot be misused for other session).

If you need to store the password in plain-text, use session option PasswordPlain, instead of Password. Note that WinSCP will, if possible, replace the PasswordPlain with equivalent Password option on the first start-up. The same way, you can use TunnelPasswordPlain instead of TunnelPassword and ProxyPassword instead of ProxyPasswordEnc.

As alternative to own installer you can directly embed site settings to WinSCP executable.

You can do it by inserting INI file with site settings to RCData resource named “WINSCP_SESSION”.

[Sessions\Server]
HostName=example.com
UserName=customer

When WinSCP finds such resource it loads the session list from it instead of configured storage. In addition it automatically starts the first session in the list, unless overridden by specifying name of another session on command line. Note that general configuration options will be ignored, when present in the INI file.

You can also embed private key to be used for authentication to RCData resource named “WINSCP_KEY”. WinSCP will automatically try to use it for authentication unless session has its own key configured.

To embed the RCData resource you can use any resource editor, for example Resource Hacker.

Using a command-line interface of the Resource Hacker, you add the “WINSCP_SESSION” resource like:

ResourceHacker.exe -addoverwrite WinSCP.exe, WinSCP.exe, session.ini, RCDATA, WINSCP_SESSION, 0

where the session.ini is the INI file with your session.

Check the generated ResourceHacker.log for results of the operation.

You can of course also use a GUI interface

The custom installer can utilize ability of the application to restrict or enforce its certain functionality.

WinSCP supports save extension to URL format of protocols it handles that makes it save session settings provided by URL instead of opening a session.

When creating custom distribution of WinSCP, please bear in mind that you need to follow WinSCP license, unless arranged otherwise with an author.