2015-01-19 2 views
-2

Я установил WinSCP на свой компьютер и хочу получить соединение с другим сервером через консольное приложение C#.WinSCP C# для первого использования

using WinSCP; 
namespace WINSCP_SFTP 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       Console.WriteLine("test"); 
       SessionOptions sessionOptions = new SessionOptions 
       { 
        Protocol = Protocol.Sftp, 
        HostName = "hostname", 
        UserName = "user", 
        Password = "password" 
       }; 

       using (Session session = new Session()) 
       { 
        session.ExecutablePath = @"C:\Program Files\WinSCP"; 
        session.Open(sessionOptions); 

        Console.WriteLine(session.Opened); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

Но если я запускаю exe-файл, приложение вылетает еще до появления первого Console.WriteLine .. Любые идеи, что я делаю неправильно?

Обновление: Появляется предупреждение, в котором говорится: WINSCP_SFTP перестает работать. Затем в строке cmd появляется текст: Unhandled Exception .. Я попытался попробовать try.catch вокруг всего моего кода, но он также не работает «т поймать ошибку

ошибка, которая происходит (Изображение из Интернета, а не скриншот моего приложения): enter image description here

+1

Пожалуйста размещать всю необходимую информацию о аварии, особенно точное сообщение об ошибке. Если доступно, обратная трассировка также будет полезна. –

+1

И в чем причина аварии? Проверьте журналы событий компьютера или запустите его в Visual Studio и посмотрите, что он говорит. Это, конечно, чрезвычайно важно для нас, чтобы помочь вам понять, в чем проблема. – mason

+0

Появляется предупреждение, в котором говорится: WINSCP_SFTP перестает работать. Затем в строке cmd появляется текст: Unhandled Exception .. Может быть, потому что на моем локальном компьютере у меня есть визуальная студия с .dll, но приложение работает на сервер? – ZerOne

ответ

-1

попробовать что-то более подобное (это происходит из веб-службы окон).

winscp.exe должно быть в корневом каталоге приложения.

EDIT: см. Winscp.net/rus/docs/library_install «Узел WinSCP .NET взаимодействует с WinSCP winscp.exe. По умолчанию он ищет файл winscp.exe в той же папке, где хранится сборка. Разумеется, вы должны извлечь пакет в ту же папку, где у вас установлен/извлечен WinSCP. Вы также можете скопировать все двоичные файлы, winscp.exe и winscpnet.dll в отдельную папку. «Попробуйте поместить файл .exe в папку приложения.

К «Объединить WinSCP DLL в свой ехе есть чтение из Embedding DLLs in a compiled executable

using WinSCP; 

try 
{ 
    SessionOptions sessionOptions = new SessionOptions 
    { 
     Protocol = Protocol.Sftp, 
     HostName = EdiConfiguration.FtpIpAddressOrHostName, 
     UserName = EdiConfiguration.FtpUserName, 
     Password = EdiConfiguration.FtpPassword, 
     SshHostKeyFingerprint = EdiConfiguration.SshHostKeyFingerprint, 
     PortNumber = EdiConfiguration.FtpPortNumber 
    }; 

    using (Session session = new Session()) 
    { 
     session.Open(sessionOptions); 

     TransferOptions transferOptions = new TransferOptions(); 
     transferOptions.TransferMode = TransferMode.Binary; 
     transferOptions.ResumeSupport.State = TransferResumeSupportState.Off; 

     // Download the files in the OUT directory. 
     TransferOperationResult transferOperationResult = session.GetFiles(EdiConfiguration.FtpDirectory, EdiConfiguration.IncommingFilePath, false, transferOptions); 

     // Check and throw if there are any errors with the transfer operation. 
     transferOperationResult.Check(); 

     // Remove files that have been downloaded. 
     foreach (TransferEventArgs transfer in transferOperationResult.Transfers) 
     { 
      RemovalOperationResult removalResult = session.RemoveFiles(session.EscapeFileMask(transfer.FileName)); 

      if (!removalResult.IsSuccess) 
      { 
       eventLogUtility.WriteToEventLog("There was an error removing the file: " + transfer.FileName + " from " + sessionOptions.HostName + ".", EventLogEntryType.Error); 
      } 
     } 
    } 
} 
catch (SessionLocalException sle) 
{ 
    string errorDetail = "WinSCP: There was an error communicating with winscp process. winscp cannot be found or executed."; 
    errorDetail += Environment.NewLine + "Message:" + sle.Message; 
    errorDetail += Environment.NewLine + "Target Site:" + sle.TargetSite; 
    errorDetail += Environment.NewLine + "Inner Exception:" + sle.InnerException; 
    errorDetail += Environment.NewLine + "Stacktrace: " + sle.StackTrace; 
    eventLogUtility.WriteToEventLog(errorDetail, EventLogEntryType.Error); 
} 
catch (SessionRemoteException sre) 
{ 
    string errorDetail = "WinSCP: Error is reported by the remote server; Local error occurs in WinSCP console session, such as error reading local file."; 
    errorDetail += Environment.NewLine + "Message:" + sre.Message; 
    errorDetail += Environment.NewLine + "Target Site:" + sre.TargetSite; 
    errorDetail += Environment.NewLine + "Inner Exception:" + sre.InnerException; 
    errorDetail += Environment.NewLine + "Stacktrace: " + sre.StackTrace; 
    eventLogUtility.WriteToEventLog(errorDetail, EventLogEntryType.Error); 
} 
catch (Exception ex) 
{ 
    eventLogUtility.WriteToEventLog("Error in ProcessEdi() while downloading EDI files via FTP: Message:" + ex.Message + "Stacktrace: " + ex.StackTrace, EventLogEntryType.Error); 
} 
+1

Как отправить случайный код, который вызывает WinSCP, ответить на этот вопрос (что касается сбоя)? –

+0

@ FrédéricHamidi Во-первых, это вряд ли случайный мой тупой парень, это пример рабочего кода. Во-вторых, я никогда не видел, чтобы он вызывался, как OP, вы делаете это так, как я, как описано в их документации, если, конечно, вы не запускаете его из командной строки, а это не так. –

+0

Я думаю, что моя проблема в том, что я неправильно установил winscp. Но не знаю, как правильно установить его. – ZerOne

0
//Using WinSCP to upload and download files 
using System; 
using System.Configuration;` 
using System.Data; 
using System.Data.SqlClient; 
using System.IO; 
using System.Text; 

using log4net; 
using log4net.Config; 

using WinSCP; 

namespace SynchSubscriptions 
{ 
    public class Program 
    { 
     // Initialize logger 
     private static readonly ILog Logger = LogManager.GetLogger(typeof(Program)); 

     public static void Main(string[] args) 
     { 
      Download(); 
      UploadFile(); 
     } 

     public static void Download() 
     {   
      try 
      { 
       string ftpurl = ConfigurationManager.AppSettings["FTPUrl"]; 
       string ftpusername = ConfigurationManager.AppSettings["FTPUsername"]; 
       string ftppassword = ConfigurationManager.AppSettings["FTPPassword"]; 
       string ftpSSHFingerPrint = ConfigurationManager.AppSettings["SSHFingerPrint"]; 

       string ftpfilepath = ConfigurationManager.AppSettings["FtpFilePath"]; 
       string Download = ConfigurationManager.AppSettings["Download"]; 

       SessionOptions sessionOptions = new SessionOptions 
       { 
        Protocol = Protocol.Sftp, 
        HostName = ftpurl, 
        UserName = ftpusername, 
        Password = ftppassword, 
        PortNumber = 22, 
        SshHostKeyFingerprint = ftpSSHFingerPrint 
       };   

       using (Session session = new Session()) 
       { 
        session.SessionLogPath = ""; 
        session.Open(sessionOptions); 
        RemoteDirectoryInfo directory = session.ListDirectory("/Export/"); 
        foreach (RemoteFileInfo fileInfo in directory.Files) 
        { 
        TransferOptions transferOptions = new TransferOptions(); 
        transferOptions.TransferMode = TransferMode.Binary; 
        transferOptions.FilePermissions = null; 
        transferOptions.PreserveTimestamp = false; 
        transferOptions.ResumeSupport.State = TransferResumeSupportState.Off; 
        TransferOperationResult transferResult; 
        transferResult = session.GetFiles("/Export/" + fileInfo.Name, Download, false, transferOptions); 
        transferResult.Check(); 
        } 
       } 
      } 
      catch (Exception ex) 
      {    
      } 
     } 


     private static bool UploadFile() 
     { 
      bool success = false; 
      string sourcefilepath = "Input File Path"; 
      try 
      { 
       string ftpurl = ConfigurationManager.AppSettings["FTPUrl"]; 
       string ftpusername = ConfigurationManager.AppSettings["FTPUsername"]; 
       string ftppassword = ConfigurationManager.AppSettings["FTPPassword"]; 
       string ftpSSHFingerPrint = ConfigurationManager.AppSettings["SSHFingerPrint"]; 

       string ftpfilepath = ConfigurationManager.AppSettings["FtpFilePath"]; 

       SessionOptions sessionOptions = new SessionOptions 
       { 
        Protocol = Protocol.Sftp, 
        HostName = ftpurl, 
        UserName = ftpusername, 
        Password = ftppassword, 
        SshHostKeyFingerprint = ftpSSHFingerPrint 
       }; 

       string filename = Path.GetFileName(sourcefilepath); 
       string ftpfullpath = ftpurl + "/" + filename; 

       using (Session session = new Session()) 
       { 
        // Connect 
        session.Open(sessionOptions); 

        // Upload files 
        TransferOptions transferOptions = new TransferOptions(); 
        transferOptions.TransferMode = TransferMode.Binary; 

        TransferOperationResult transferResult = session.PutFiles(sourcefilepath, ftpfilepath, false, transferOptions); 

        // Throw on any error 
        transferResult.Check(); 

        // Print results 
        foreach (TransferEventArgs transfer in transferResult.Transfers) 
        {      
         success = true; 
        } 
       } 

       // Delete the file after uploading 
       if (File.Exists(sourcefilepath)) 
       { 
        File.Delete(sourcefilepath); 
       } 
      } 
      catch (Exception ex) 
      {    
      } 
      return success; 
     }  
    } 
} 
+0

WinScp можно открыть 1 сеанс и продолжить, или нужно открыть новый сеанс всегда, как кнопка нажать файл загрузить/загрузить – NC64

+0

Я не уверен, я каждый раз создавал новый сеанс для загрузки/скачивания – Rajkumar

Смежные вопросы