Topic "VB.net code issue!"

Author Message
GuessingGame

Guest


Ok... so i tried it a million ways and it just doesnt want to work.

I created a saved session "OD" in winscp. Also set the local and remote directories too. Then tested through the GUI and it worked.

So then I created a batch file (pushit.bat) and it contains: "C:\FTPTEST\winscp422.exe" /console /script=C:\FTPTEST\pushfiles_Script.txt

pushfiles_Script.txt contains:
option batch on
option confirm off
open OD
put -speed=300 *
close
exit

If I run the batch file manually, it works... so I know I have a valid test case here..

So here's my code... First started with just calling the .bat instead of dealing with the standardinput and adding cmds...
Code:
Private Function winscpCaller() As Boolean

        Dim winscp As Process = New Process()
        Dim results As Boolean = False

        Try

            winscp.StartInfo.FileName = C:\FTPTEST\pushfiles_Script.bat"
            winscp.StartInfo.UseShellExecute = False
            winscp.StartInfo.RedirectStandardInput = True
            winscp.StartInfo.RedirectStandardOutput = True
            winscp.StartInfo.CreateNoWindow = True
            winscp.Start()

            ' Wait until WinSCP finishes
            winscp.WaitForExit(20000) '= 20seconds

            ' Success (0) or error?
            If winscp.Has_Exited Then ' winscp.ExitCode <> 0 Then   '(the forum blocks s E x)
                results = True
            Else
                results = False
            End If
        Catch ex As Exception

            WriteToErrorLog("error- " + ex.Message)
            winscp.Kill()
            winscp.Close()
            winscp.Dispose()

            Return False
            Exit Function

        Finally

            If results = False Then
                WriteToErrorLog("Process Killed")
                winscp.Kill()
                winscp.Close()
                winscp.Dispose()
            Else
                WriteToErrorLog("Completed")
                winscp.Close()
                winscp.Dispose()
            End If

        End Try

        Return results

    End Function


I ALSO tried calling the exe too.
Code:

  Private Function winscpCaller(ByVal ProcessPathPlusName) As Boolean

        Dim winscp As Process = New Process()
        Dim results As Boolean = False

        Try

            ' Run hidden WinSCP process
            winscp.StartInfo.FileName = ProcessPathPlusName  '= C:\FTPTEST\winscp422.exe  (path + exe name)
            winscp.StartInfo.UseShellExecute = False
            winscp.StartInfo.RedirectStandardInput = True
            winscp.StartInfo.CreateNoWindow = true
            winscp.Start()

            ' Feed in the scripting commands
            winscp.StandardInput.WriteLine("option batch on")
            winscp.StandardInput.WriteLine("option confirm off")
            winscp.StandardInput.WriteLine("open OD")
            winscp.StandardInput.WriteLine("put *")
            winscp.StandardInput.WriteLine("close")
            winscp.StandardInput.WriteLine("exit")
            winscp.StandardInput.Close()

            ' Wait until WinSCP finishes
            winscp.WaitForExit(20000) '= 20seconds max wait

            ' Success (0) or error?
            If winscp.Has_Exited Then ' winscp.ExitCode <> 0 Then  '(the forum blocks s E x)
                results = True
                WriteToErrorLog("process has exited normally")
            Else
                results = False
                WriteToErrorLog("process has not exited normally")
            End If
        Catch ex As Exception

            WriteToErrorLog("error- " + ex.Message)
            winscp.Kill()
            winscp.Close()
            winscp.Dispose()

            Return False
            Exit Function

        Finally

            If results = False Then
                WriteToErrorLog("Process Killed")
                winscp.Kill()
                winscp.Close()
                winscp.Dispose()
            Else
                WriteToErrorLog("Completed")
                winscp.Close()
                winscp.Dispose()
            End If

        End Try

        Return results

    End Function



ALSO through ARGS .. OneComma is a string const for a single Comma Char. I can even say I did the script syntax of doubling and tripling them according to the site... that didnt work neither.

Code:

winscp.StartInfo.FileName = ProcessPathPlusName  '= C:\FTPTEST\winscp422.exe  (path + exe name)
winscp.StartInfo.Arguments = "/console /command " & _
            Onecomma & "option batch on" & Onecomma & " " & _
            Onecomma & "open OracleDataFeed" & Onecomma & " " & _
            Onecomma & "put *" & Onecomma & " " & _
            Onecomma & "exit" & Onecomma
winscp.StartInfo.UseShellExecute = False
winscp.StartInfo.RedirectStandardInput = True
winscp.StartInfo.CreateNoWindow = true
winscp.Start()



Also... if I go to Start > Run and execute: C:\FTPTEST\winscp422.exe /console /command "option batch on" "open OD" "put *" "exit"
that Works too...

So what's wrong with .net kicking off this process?! It never completes and yes at one point i removed the wait time to unlimited to makes sure my 20seconds max was the issue either...

Help Very Happy
Advertisements
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 25034
Location: Prague, Czechia
Please read documentation:
https://winscp.net/eng/docs/guide_dotnet

I do not think you can execute .bat directly like this. You may need to execute it via cmd.exe.
I won't work with winscp.exe either as it is not console application. Use winsp.com as WinSCP documentation suggests everywhere.
GuessingGame

Guest


No calling a .bat works fine.

However... you solved it. I wanted to just call the .exe directly... However, now following your advice and calling the .com it worked. (kinda) ... So I created a stored session and if i run the .com and in the cmd prompt type open mysession_name, it connects etc and basically finds the stored session. However reviewing the output log thats produced from my .net app, it says session not found and never connects to the remote server. I reviewed the session name in code to confirm i spelled everything right. Thoughts?

I am creating a windows service which uses a file watcher to immediately push a file to the ftp location. Could the service running as the OS admin not able to see my stored session I created on my windows admin user account?? I would think this is odd but worth mentioning to see it sparks any additional thoughts Very Happy

Thanks for the help so far!
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 25034
Location: Prague, Czechia
GuessingGame wrote:
Could the service running as the OS admin not able to see my stored session I created on my windows admin user account??

Most probably. See https://winscp.net/eng/docs/faq_scheduler.
_________________
Martin Prikryl
Advertisements

You can post new topics in this forum






Search Site

What is WinSCP?

It is award-winning SFTP client, SCP client, FTPS client and FTP client integrated into one software program for file transfer to FTP server or secure SFTP server. [More]

And it's free!

Donate

About donations

$9   $19   $49   $99

About donations

Recommend

WinSCP Privacy Policy

WinSCP License