Disable SSH tunnel connections on Windows 10 S, as a requirement for publishing HeidiSQL in the Windows App store, #60.

This commit is contained in:
Ansgar Becker
2018-01-31 18:25:12 +01:00
parent a26d68d23c
commit 3d698f9f68
4 changed files with 46 additions and 4 deletions

View File

@ -338,7 +338,8 @@ type
procedure Help(Sender: TObject; Anchor: String);
function PortOpen(Port: Word): Boolean;
function IsValidFilePath(FilePath: String): Boolean;
function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion: DWORD; out pdwReturnedProductType: DWORD): BOOL stdcall; external kernel32 delayed;
function RunningOnWindows10S: Boolean;
var
AppSettings: TAppSettings;
@ -2834,6 +2835,22 @@ begin
end;
function RunningOnWindows10S: Boolean;
const
PRODUCT_CLOUD = $000000B2; //* Windows 10 S
PRODUCT_CLOUDN = $000000B3; //* Windows 10 S N
PRODUCT_CORE = $00000065; //* Windows 10 Home
var
pdwReturnedProductType: DWORD;
begin
// Detect if we're running on Windows 10 S
// Taken from https://forums.embarcadero.com/message.jspa?messageID=900804
Result := False;
if GetProductInfo(10, 10, 0, 0, pdwReturnedProductType) then begin
Result := (pdwReturnedProductType = PRODUCT_CLOUD) OR (pdwReturnedProductType = PRODUCT_CLOUDN);
end;
end;
{ Threading stuff }

View File

@ -214,7 +214,7 @@ end;
procedure Tconnform.FormCreate(Sender: TObject);
var
LastActiveSession: String;
LastActiveSession, NetTypeStr: String;
LastSessions: TStringList;
PSess: PConnectionParameters;
nt: TNetType;
@ -244,8 +244,13 @@ begin
comboNetType.Clear;
Params := TConnectionParameters.Create;
for nt:=Low(nt) to High(nt) do
comboNetType.Items.Add(Params.NetTypeName(nt, True));
for nt:=Low(nt) to High(nt) do begin
NetTypeStr := Params.NetTypeName(nt, True);
if RunningOnWindows10S and (not Params.IsCompatibleToWin10S(nt)) then begin
NetTypeStr := NetTypeStr + ' ['+_('Does not work on Windows 10 S')+']';
end;
comboNetType.Items.Add(NetTypeStr);
end;
Params.Free;
// Init sessions tree

View File

@ -221,6 +221,7 @@ type
function CreateConnection(AOwner: TComponent): TDBConnection;
function CreateQuery(AOwner: TComponent): TDBQuery;
function NetTypeName(NetType: TNetType; LongFormat: Boolean): String;
class function IsCompatibleToWin10S(NetType: TNetType): Boolean;
function GetNetTypeGroup: TNetTypeGroup;
function IsMySQL: Boolean;
function IsMSSQL: Boolean;
@ -1277,6 +1278,13 @@ begin
end;
class function TConnectionParameters.IsCompatibleToWin10S(NetType: TNetType): Boolean;
begin
// Using plink on 10S is not possible
Result := NetType <> ntMySQL_SSHtunnel;
end;
function TConnectionParameters.GetNetTypeGroup: TNetTypeGroup;
begin
case FNetType of
@ -1622,6 +1630,12 @@ var
PasswordChangeDialog: TfrmPasswordChange;
begin
if Value and (FHandle = nil) then begin
// Die if trying to run plink on Win10S
if RunningOnWindows10S and (not FParameters.IsCompatibleToWin10S(FParameters.NetType)) then begin
raise EDatabaseError.Create(_('The network type defined for this session is not compatible to your Windows 10 S'));
end;
DoBeforeConnect;
// Get handle