2011-12-22 13 views
1

ファイアウォール経由でアプリケーションを許可しようとしていますが、アクティブでパッシブモードでftpする必要があります。私のアプリケーションにファイアウォール経由でのアクセスを許可するC#

MyApp.Classes.INetFwMgr mgr = new MyApp.Classes.INetFwMgr(); 
    mgr.AuthorizeApplication(Application.ProductName, Application.StartupPath, 
     NET_FW_SCOPE_.NET_FW_SCOPE_ALL, 
     NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY); 

と仕事をしていませんクラス:コードの上に使用して

private const string CLSID_FIREWALL_MANAGER = 
"{304CE942-6E39-40D8-943A-B913C40C9CD4}"; 
private static NetFwTypeLib.INetFwMgr GetFirewallManager() 
{ 
Type objectType = Type.GetTypeFromCLSID( 
new Guid(CLSID_FIREWALL_MANAGER)); 
return Activator.CreateInstance(objectType) 
as NetFwTypeLib.INetFwMgr; 
} 


private const string PROGID_AUTHORIZED_APPLICATION = 
"HNetCfg.FwAuthorizedApplication"; 
public bool AuthorizeApplication(string title, string applicationPath, 
NET_FW_SCOPE_ scope, NET_FW_IP_VERSION_ ipVersion) 
{ 
// Create the type from prog id 
Type type = Type.GetTypeFromProgID(PROGID_AUTHORIZED_APPLICATION); 
INetFwAuthorizedApplication auth = Activator.CreateInstance(type) 
as INetFwAuthorizedApplication; 
auth.Name = title; 
auth.ProcessImageFileName = applicationPath; //Getting Access Denied Exception Here 
auth.Scope = scope; 
auth.IpVersion = ipVersion; 
auth.Enabled = true; 
NetFwTypeLib.INetFwMgr manager = GetFirewallManager(); 
try 
{ 
manager.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(auth); 
} 
catch (Exception ex) 
{ 
return false; 
} 
return true; 
} 

を、私はライン

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) C#の例外を取得ので、私はそれを使用してexexcute、罰金コンパイル以下のコードを試してみました
auth.ProcessImageFileName = applicationPath; 

何をすべきか?

Edit1:私はコードを使用してこれを管理者として実行しますか?

Edit2:は、私はまた、実行コンテキストは、XPの勝利7、Vistaでは、することができPutting <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> in manifest did not make a difference

PSThisプログラムを試してみました

+0

参考までに、「C#.net」などはありません。 –

+7

このコードの実行コンテキストとは何ですか?通常のプログラムでは、ファイアウォールを強制的にオープンにするだけではなく、それによってファイアウォールを持つことができます。少なくとも管理者特権が必要になります。通常はインストーラでしか入手できない種類のものです。サーバーのシナリオでは、明らかにアクセス権を明示的に与えるためにLAN管理者に任せておきます。 –

答えて

1

私は、次のウィンドウのダイアログにftpのダウンロードステートメントの順序を変更すると、そのことを確認したことがわかりますdo you want to allow this program access through firewall;アクセスを許可するをクリックすると、コードは完全に機能します。 Windowsファイアウォールで

requestDownload = (FtpWebRequest)WebRequest.Create(uri); 
          requestDownload.UsePassive = false; 
          requestDownload.KeepAlive = false; 
          requestDownload.UseBinary = true; 
          requestDownload.Method = WebRequestMethods.Ftp.DownloadFile; 


          requestDownload.Credentials = new NetworkCredential(ftpInfoDownload[3], ftpInfoDownload[4]); 

          responseDownload = (FtpWebResponse)requestDownload.GetResponse(); 
          Stream ftpStream = responseDownload.GetResponseStream(); 
0

ファイアウォールでFTPポートを開いてみてください - ポート20と21を - と、そのかどうかを確認あなたの問題を解決します。別のユーザーとして実行するための

+0

、手動で「許可」リストにプログラムを追加することができます(_AllowのためのWindows Firewall_によるプログラムや機能を見て)、または手動で特定のTCP/IPポート(通常は高度な設定)を上書きすることができます。実行するWindowsのバージョンによって、どのオプションが最も簡単に構成されるかによって異なります。 – hypercode

+0

ファイアウォールにルールを追加して、20,21でconnetionsを許可し、依然としてftpリクエストが – PUG

+0

のタイムアウトになりましたが、ファイアウォールを介してプログラムを許可しました。コードを使用してファイアウォールを介してプログラムを許可する提案はありますか?コードとプログラムは、すべてのクライアントシステムに単独でインストールされます。どうすればいいですか? – PUG

0

:ファイアウォールを介して取得するよう Run Code as a different user (C#)

は、ファイアウォールセキュリティ責任者/グループに話をしていますか?彼らはあなたが使うことができるいくつかのルールを定めるかもしれません。

+0

私はそれをプログラマチックにやりたい、ファイアウォールを介した.exeアクセスを許可する。 – PUG

+0

@ジャミナー - 明らかに、それはあなたが後にしていることですが、そうするのは本当に倫理的ですか? –

+1

あなたはファイアウォールの背後にある目的が正しいことを知っていますか?権限のないアクセスを停止する。別の用途としてコードを実行できますが、移動しようとしている場所がポート/ ACLレベルでブロックされているかどうかは関係ありません。これは、LAN管理者がお手伝いできるものです。あなたはLAN/Firewallの管理者と話したくない理由はありますか? –

1

ファイアウォール管理はシステムレベルのセキュリティ機能であり、ユーザーモードのアプリケーションコード以外で実行する必要があります。設定は管理者が行う必要があります。

あなたが書いたコードを書いて、あなたのアプリケーションが管理者として実行されることを前提とするのは悪い習慣です。それが管理者によって実行されたとしても、あなたは "FTPの処理"と "ファイアウォールの処理"を行うアプリケーションを持つようになりました。このようなアプリケーションはこれまでに書かれていません。

システムファイアウォールとやり取りするコードを書くことができます。そのコードは昇格された権限で実行する必要があります。通常、このような「ヘルパーアプリケーション」は作成されることはありませんが、Windows(および他のすべてのOS)には、OSに付属するすべての必要な管理ツール(つまり、wf.msc)があります。

関連する問題