VB C# .NET Freamworkの備忘録

C#, VB.NET Freamworkの備忘録を掲載しています。 コントロール、WPF、スレッド、共通関数と実用的なコードを掲載してきます。

VB ファイアウォール アプリケーション例外対策

作成したアプリケーションがファイアウォールの例外に引っかかり、
起動できない場合に以下を利用します。

Comコンポーネントを使い、ファイアウォールのルールを変更します。


''' <summary>
''' COMに関する共通クラスです。
''' </summary>
''' <remarks></remarks>
Friend Class ComCommon
‌ 
#Region "Windowsファイアウォールの例外削除 アプリケーション"
‌ 
    ''' <summary>
    ''' XPのWindowsファイアウォールの例外削除を行います。
    ''' </summary>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub UnRegistFireWallForXP(ByVal exePath As String)
        Dim fwMgr As Object = CreateObject("HNetCfg.FwMgr")
        fwMgr.LocalPolicy.CurrentProfile.AuthorizedApplications.Remove(exePath)
    End Sub
‌ 
    ''' <summary>
    ''' Server2003のWindowsファイアウォールの例外削除を行います。
    ''' </summary>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub UnRegistFireWallForServer2003(ByVal exePath As String)
        Dim fwMgr As Object = CreateObject("HNetCfg.FwMgr")
        fwMgr.LocalPolicy.GetProfileByType(NET_FW_PROFILE_STANDARD).AuthorizedApplications.Remove(exePath)
    End Sub
‌ 
    ''' <summary>
    ''' 2008Server以降のWindowsファイアウォールの例外削除を行います。
    ''' </summary>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub UnRegistFireWallForAfterServer2008(ByVal exePath As String)
        Dim fwPolicy2 As Object = CreateObject("HNetCfg.FwPolicy2")
        fwPolicy2.Rules.Remove(exePath)
    End Sub
‌ 
#End Region
‌ 
#Region "Windowsファイアウォールの例外登録 アプリケーション"
‌ 
    ''' <summary>
    ''' XPのWindowsファイアウォールの例外にアプリケーションを登録します。
    ''' </summary>
    ''' <param name="serviceName">サービス名</param>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub RegistFireWallForXP(ByVal serviceName As StringByVal exePath As String)
‌ 
        Dim fwMgr As Object = CreateObject("HNetCfg.FwMgr")
        Dim policy As Object = fwMgr.LocalPolicy.CurrentProfile
‌ 
        Dim newApplication As Object = CreateObject("HNetCfg.FwAuthorizedApplication")
        newApplication.Name = serviceName
        newApplication.IPVersion = 2
        newApplication.ProcessImageFileName = exePath
        newApplication.RemoteAddresses = "*"
        newApplication.Scope = 0
        newApplication.Enabled = True
‌ 
        Dim applicationList As Object = policy.AuthorizedApplications
        applicationList.Add(newApplication)
‌ 
    End Sub
‌ 
    Private Const NET_FW_PROFILE_DOMAIN = 0
    Private Const NET_FW_PROFILE_STANDARD = 1
‌ 
    ''' <summary>
    ''' Server2003のWindowsファイアウォールの例外にアプリケーションを登録します。
    ''' </summary>
    ''' <param name="serviceName">サービス名</param>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub RegistFireWallForServer2003(ByVal serviceName As StringByVal exePath As String)
‌ 
        Dim fwMgr As Object = CreateObject("HNetCfg.FwMgr")
        Dim policy As Object = fwMgr.LocalPolicy.GetProfileByType(NET_FW_PROFILE_STANDARD)
‌ 
        Dim newApplication As Object = CreateObject("HNetCfg.FwAuthorizedApplication")
        newApplication.Name = serviceName
        newApplication.IPVersion = 2
        newApplication.ProcessImageFileName = exePath
        newApplication.RemoteAddresses = "*"
        newApplication.Scope = 0
        newApplication.Enabled = True
‌ 
        Dim applicationList As Object = policy.AuthorizedApplications
        applicationList.Add(newApplication)
‌ 
    End Sub
‌ 
    ' Protocol
    Private Const NET_FW_IP_PROTOCOL_TCP = 6
    Private Const NET_FW_IP_PROTOCOL_UDP = 17
    Private Const NET_FW_ACTION_ALLOW = 1
‌ 
‌ 
    ''' <summary>
    ''' 2008Server以降のWindowsファイアウォールの例外にアプリケーションを登録します。
    ''' </summary>
    ''' <param name="serviceName">サービス名</param>
    ''' <param name="exePath">実行ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub RegistFireWallForAfterServer2008(ByVal serviceName As StringByVal exePath As String)
‌ 
        Dim fwPolicy2 As Object = CreateObject("HNetCfg.FwPolicy2")
‌ 
        Dim NewRule As Object = CreateObject("HNetCfg.FWRule")
‌ 
        NewRule.Name = serviceName
        NewRule.Description = "Allow incoming network traffic to myservice"
        NewRule.Applicationname = exePath
        NewRule.Servicename = "myservicename"
        NewRule.Protocol = NET_FW_IP_PROTOCOL_TCP
        NewRule.LocalPorts = 135
        NewRule.Grouping = "@firewallapi.dll,-23255"
        NewRule.Profiles = fwPolicy2.CurrentProfileTypes
        NewRule.Enabled = True
        NewRule.Action = NET_FW_ACTION_ALLOW
‌ 
        'Add a new rule
        Dim RulesObject As Object = fwPolicy2.Rules
        RulesObject.Add(NewRule)
‌ 
‌ 
    End Sub
‌ 
#End Region
‌ 
End Class

MediaElementで mp4 ファイルを再生するには



WindowsMediaPlayer12以降は標準で mp4再生用のコーデック(H264)が内部に入っています。
それ以前はフリーまたは有償のコーデックソフトをインストールし対応します。

詳細は以下を参照
http://www.gigafree.net/media/codec/

WindowsMediaPlayer12はWindows7で標準でインストールされています。
ただし、XP以前のパソコンはWindowsMediaPlayer11までしかアップグレードできません。 
そのため、再生する際は必ずコーデックソフトが必要になります。 

 XP、7でmp4を再生するソフトを作成時は、独自にDirectShow等を用いて、
MediaPlayerを作成すべきだと考えます。 

----------------------------------------------------------
VB C# .NET Freamworkの備忘録
http://ari-it.doorblog.jp/
javascriptの備忘録
http://ari-java.doorblog.jp/
--------------------------------------------------------- 

WPF タイマースレッドDispatcherTimer



WPF でスレッドタイマーを扱う場合には、
DispatcherTimer クラスを利用することで簡単にメインスレッドのコントロールを操作することができます。
WindowsFormの場合はスレッドやバックグランドワーカーからInvokeしてコントロールを操作したり手続きが面倒だった。。。

DispatcherTimer クラスのDispatcherTimer_Tickイベントはメインスレッド内で実行されるため、
重い処理を行った場合、ウィンドウの描画や操作が一時的に停止します。

タイマーで重い処理を行いたい場合はバックグランドワーカーや通常スレッドを利用して処理する。

using System;
using System.Windows;
using System.Windows.Threading;
 
namespace Sample
{
    /// <SUMMARY>
    /// MainWindow.xaml の相互作用ロジック
    /// </SUMMARY>
    public partial class MainWindow : Window
    {
        private DispatcherTimer m_Timer = null;
 
        public MainWindow()
        {
            InitializeComponent();
 
            // Loadedイベントの登録
            this.Loaded += new RoutedEventHandler( MainWindow_Loaded );
        }
 
        private void MainWindow_Loaded( object sender, RoutedEventArgs e )
        {
            // タイマーを作成する
            m_Timer = new DispatcherTimer( DispatcherPriority.Normal, this.Dispatcher );
            m_Timer.Interval = TimeSpan.FromSeconds( 1 );
            m_Timer.Tick += new EventHandler( DispatcherTimer_Tick );
            // タイマーの実行開始
            m_Timer.Start();
        }
 
        private void DispatcherTimer_Tick( object sender, EventArgs e )
        {
            // メインスレッドで実行
            this.textBlock1.Text = DateTime.Now.ToString();
        }
    }
}

----------------------------------------------------------
VB C# .NET Freamworkの備忘録
http://ari-it.doorblog.jp/
javascriptの備忘録
http://ari-java.doorblog.jp/
--------------------------------------------------------- 

↑このページのトップヘ