Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

martin

Re: Create WinSCP.SessionOptions takes 20 seconds in COM and account not logged on

Sorry, I do not know.
But the delay most probably happens even before the assembly is loaded.
abnew1

Create WinSCP.SessionOptions takes 20 seconds in COM and account not logged on

Hi,

I use WinSCPnet.dll with a program written with AutoIT script language. It acts as a COM.
It works fine but when I start the program from a scheduled task (under Windows Server 2012 R2) using an user account that is not logged on, it takes 20 seconds for the WinSCP.SessionOptions create object. If I run the scheduled task with a user already logged on, it create the object immediately.

So, I tried with two simple scripts, one with Powershell and one with VBScript.
With Powershell there is no wait time and with VBScript it takes 20 seconds too.

This is the Powershell code:
try

{
    # Load WinSCP .NET assembly
    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
 
    # Setup session options
    Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Create object WinSCP.SessionOptions`r"
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "***.**.***.**"
        UserName = "AldoProva"
        Password = "***"
        SshHostKeyFingerprint = "ssh-rsa 2048 ***"
    }
    Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Object created`r"
 
    Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Create object WinSCP.Session`r"
    $session = New-Object WinSCP.Session
    Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Object created`r"
 
    try
    {
        # Connect
        Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Open Session`r"
        $session.Open($sessionOptions)
        Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Session opened`r"
 
        # Upload files
        Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Create object WinSCP.TransferOptions`r"
        $transferOptions = New-Object WinSCP.TransferOptions
        Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Object created`r"
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
 
        $transferResult =
            $session.PutFiles("E:\test.txt", "/", $False, $transferOptions)
 
        # Throw on any error
        $transferResult.Check()
 
        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host $(Get-Date -format "dd/MM/yyyy HH:mm:ss") " Upload of $($transfer.FileName) succeeded`r"
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    Write-Host "`r"
    exit 0
}
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}

This is the result... started with "powershell -file E:\Aldo\testps.ps1 >>E:\Aldo\testps.log" command.
First session with an account logged on (speedy), second session with an account not logged on (speedy).
21/02/2018 17:01:05  Create object WinSCP.SessionOptions

21/02/2018 17:01:05  Object created
21/02/2018 17:01:05  Create object WinSCP.Session
21/02/2018 17:01:05  Object created
21/02/2018 17:01:05  Open Session
21/02/2018 17:01:07  Session opened
21/02/2018 17:01:07  Create object WinSCP.TransferOptions
21/02/2018 17:01:07  Object created
21/02/2018 17:01:07  Upload of E:\test.txt succeeded

21/02/2018 17:01:32  Create object WinSCP.SessionOptions
21/02/2018 17:01:32  Object created
21/02/2018 17:01:32  Create object WinSCP.Session
21/02/2018 17:01:33  Object created
21/02/2018 17:01:33  Open Session
21/02/2018 17:01:35  Session opened
21/02/2018 17:01:35  Create object WinSCP.TransferOptions
21/02/2018 17:01:35  Object created
21/02/2018 17:01:35  Upload of E:\test.txt succeeded


This is the VBScript code:
Option Explicit

 
' Setup session options
Dim sessionOptions
WScript.Echo Date & " " & Time & " Create object WinSCP.SessionOptions"
Set sessionOptions = WScript.CreateObject("WinSCP.SessionOptions")
WScript.Echo Date & " " & Time & " Object created"
With sessionOptions
    .Protocol = 0
    .HostName = "***.**.***.**"
    .UserName = "AldoProva"
    .Password = "***"
    .SshHostKeyFingerprint = "ssh-rsa 2048 ***"
End With
 
Dim session
WScript.Echo Date & " " & Time & " Create object WinSCP.Session"
Set session = WScript.CreateObject("WinSCP.Session")
WScript.Echo Date & " " & Time & " Object created"
 
' Connect
WScript.Echo Date & " " & Time & " Open session"
session.Open sessionOptions
WScript.Echo Date & " " & Time & " Session opened"
 
' Upload files
Dim transferOptions
WScript.Echo Date & " " & Time & " Create object WinSCP.TransferOptions"
Set transferOptions = WScript.CreateObject("WinSCP.TransferOptions")
WScript.Echo Date & " " & Time & " Object created"
transferOptions.TransferMode = 0
 
Dim transferResult
Set transferResult = session.PutFiles("E:\test.txt", "/", False, transferOptions)
 
' Throw on any error
transferResult.Check
 
' Print results
Dim transfer
For Each transfer In transferResult.Transfers
    WScript.Echo Date & " " & Time & " Upload of " & transfer.FileName & " succeeded"
Next
 
' Disconnect, clean up
session.Dispose

WScript.Echo ""

This is the result... started with "cscript E:\Aldo\testvbs.vbs >>E:\Aldo\testvbs.log" command.
First session with an account logged on (speedy), second session with an account not logged on (20 seconds).
Microsoft (R) Windows Script Host Version 5.8

Copyright (C) Microsoft Corporation. All rights reserved.

21/02/2018 17:01:07 Create object WinSCP.SessionOptions
21/02/2018 17:01:08 Object created
21/02/2018 17:01:09 Create object WinSCP.Session
21/02/2018 17:01:09 Object created
21/02/2018 17:01:09 Open session
21/02/2018 17:01:11 Session opened
21/02/2018 17:01:11 Create object WinSCP.TransferOptions
21/02/2018 17:01:11 Object created
21/02/2018 17:01:11 Upload of E:\test.txt succeeded

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

21/02/2018 17:01:35 Create object WinSCP.SessionOptions
21/02/2018 17:01:55 Object created
21/02/2018 17:01:55 Create object WinSCP.Session
21/02/2018 17:01:55 Object created
21/02/2018 17:01:55 Open session
21/02/2018 17:01:57 Session opened
21/02/2018 17:01:57 Create object WinSCP.TransferOptions
21/02/2018 17:01:57 Object created
21/02/2018 17:01:57 Upload of E:\test.txt succeeded


Do you have ideas on how to avoid these 20 seconds wait in COM using?
I tried with WinSCP 5.9.4, 5.11.3 and the last 5.13. Always the same result.

Grazie. Ciao,
Aldo