FTPサーバーに接続してデータをダウンロードしてユーザーに表示できるWindowsフォームプログラムを作成しています。ユーザーがゲートウェイ経由でも接続できるようにアプリを作成する必要があります。ゲートウェイ経由でログオンする次の関数を作成しました。
private Boolean addRoute(string ip, string gw)
{
string arg = String.Format("ADD {0} MASK 255.255.255.255 {1}", ip, gw);
return startProcess("route.exe", arg, 10000, true);
}
private Boolean startProcess(String fileName, String arguments, int timeout, bool admin)
{
try
{
Process process = new Process();
process.StartInfo.FileName = fileName;
if (System.Environment.OSVersion.Version.Major >= 6)
{
//if (admin) { process.StartInfo.UserName = "admin"; }
//process.StartInfo.UserName = "admin";
}
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.Arguments = arguments;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.Start();
if (timeout > 0)
{
if (process.WaitForExit(timeout))
{
return true;
}
else
{
return false;
}
}
else
{
process.WaitForExit();
return true;
}
}
catch (Exception e)
{
Global.LogMessageToFile(e.Message);
return false;
}
}
このコードは私の PC では完璧に動作しますが、Windows 7 を搭載した他の PC でテストすると、動作しなくなりました。
UACのアクセス許可に問題があると思ったので、リンクの 2 番目の回答に合わせた解決策を行いました。
私のプログラムのコードでこれを達成する方法について、他にアイデアはありますか?
編集 コメントの投稿がブロックされているので、例外はないと答えます。必要なのは、あるネットワークから別のネットワークへ、ゲートウェイを介して下位レベルに接続することです。そのため、このソリューションを採用しました。