「ほっ」と。キャンペーン
<   2013年 03月 ( 31 )   > この月の画像一覧
(.Net)DataGridViewで右クリックしたときに行選択したい
DataGridViewでコンテキストメニューを割り当てた時、右クリックをしても、クリックしたセルに対してイベント走るのではなく、その時に選択されているセルに対してイベントが走ってしまいます。

Excelみたいに、右クリックしたら、マウスポインタの位置の行が選択されて、その後コンテキストメニューが出るようにしたい場合、以下のようにMouseDownイベントで行選択してしまえばいいようです。
参考先そのままですがコードを載せておきます。(C#)

/// <summary>
/// セルでマウスダウンイベントあった時
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvParent_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
dgvParent.ClearSelection();
dgvParent.Rows[e.RowIndex].Selected = true;
}
 
}



参考:
DataGridView で右クリックして行を選択
[PR]
by Jehoshaphat | 2013-03-31 22:59 | .Net開発 | Trackback | Comments(0)
Solaris10のスタティックルートとICMPリダイレクト
Solaris10で静的ルートを追加する方法です。


一時的(再起動するまで)に追加する方法は以下のとおりです。

# route add 10.0.12.0/24 192.168.0.24
add net 10.0.12.0/24: gateway 192.168.0.24


永続的に追加する場合、以下のように -p オプションを付けます。

# route -p add 10.0.12.0/24 192.168.0.24
add net 10.0.12.0/24: gateway 192.168.0.24
add persistent net 10.0.12.0/24: gateway 192.168.0.24


-pオプションをつけると、/etc/inet/static_routes ファイルに設定が追加されます。
ただ、このファイルは手で直接触ってはいけないようです。

# cat /etc/inet/static_routes
# File generated by route(1M) - do not edit.
10.0.12.0/24 192.168.0.24


ルートを確認するには Solaris の場合、netstat -rn を使います。

# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
192.168.0.0 192.168.0.1 U 1 2 e1000g0
10.0.12.0 192.168.0.24 UG 1 0
224.0.0.0 192.168.0.101 U 1 0 e1000g0
127.0.0.1 127.0.0.1 UH 1 28 lo0


スタティックルートを削除するには以下コマンドを使います。

# route delete 10.0.12.0/24 192.168.0.24
delete net 10.0.12.0/24: gateway 192.168.0.24


永続的にスタティックルートを削除するには、-pをつけます。

# route -p delete 10.0.12.0/24 192.168.0.24
delete net 10.0.12.0/24: gateway 192.168.0.24
delete persistent net 10.0.12.0/24: gateway 192.168.0.24


さて、あるSolarisサーバにスタティックルートを設定し運用してましたが、ネットワーク構成の変更に伴い静的ルーティングを削除しました。
しかし、netstat -rnするとなぜか勝手にルーティングが増殖します。
再起動してもダメでした。その時のルーティングは以下のような状態でした。

bash-3.00# netstat -rn

Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 192.168.0.1 UG 1 3094
192.168.0.0 192.168.0.11 U 1 8 e1000g0
192.168.1.5 192.168.0.2 UGHD 1 1
192.168.1.6 192.168.0.2 UGHD 1 1
192.168.1.7 192.168.0.2 UGHD 1 1
192.168.1.10 192.168.0.2 UGHD 1 1
192.168.1.11 192.168.0.2 UGHD 1 1
192.168.1.12 192.168.0.2 UGHD 1 1
192.168.1.13 192.168.0.2 UGHD 1 1
...(省略)...
127.0.0.1 127.0.0.1 UH 18 642 lo0


こちらで意図して設定してないルーティングはのフラグは UGHD になっています。
フラグの意味については、FreeBSDの資料になりますが、静的ルーティングを見ると、以下の意味でした。

U:使用可能
H:ホスト単位の設定
G:ゲートウェイ
D:ICMP redirectによって経路が自動的に変更された
S:手動で経路追加された

ここで怪しいと思ったのは Flags のDである ICMP リダイレクトというものです。
恥ずかしながら、今までICMP Redirectというものを知りませんでした。


ICMPリダイレクトについては、ICMP(Internet Control Message Protocol)その5
@IT:基礎から学ぶWindowsネットワーク 2.ICMPメッセージ(2)@IT:ICMPリダイレクト使用時のファイアウォール設定に注意などでどういうものか詳しく説明されています。

要は、同じセグメントに複数のルータがある場合、デフォルトゲートウェイとなっているルータがクライアントに「このルートは別のルータ通したほうがよいよ」ということを教え、クライアントは自身のルーティングテーブルのその情報を追加するわけですね。

Solarisだと上記のフラグでICMPリダイレクトによって追加されたルートということがわかりますが、WindowsOSの場合、route print コマンドでサブネットマスクが 255.255.255.255 になっているものがICMPリダイレクトによって追加されたルートになるようです。
また、Windowsの場合、以下のコマンドでどれくらいICMP Redirectパケットを受け取ったかがわかります。

netstat -s -p icmp
ICMPv4 Statistics
Received Sent
Messages 3498388 3477291
Errors 848 0
Destination Unreachable 30481 187
Time Exceeded 2 131
Parameter Problems 0 0
Source Quenches 0 0
Redirects 438 0 ←ここの数
Echos 3185110 291863
Echo Replies 281510 3185110
Timestamps 0 0
Timestamp Replies 0 0
Address Masks 0 0
Address Mask Replies 0 0


Solarisの場合、以下コマンドでICMPリダイレクトを無視するかどうかがわかります。

bash-3.00# ndd -get /dev/ip ip_ignore_redirect
0

0ならICMP redirectを無視しない、1なら無視ということでしょう。
以下のようにするとICMPリダイレクトを無視する設定に出来ます。

bash-3.00# ndd -set /dev/ip ip_ignore_redirect 1


また、ICMPリダイレクトによって作られた経路情報の保持期間は以下のコマンドでわかります。

bash-3.00# ndd -get /dev/ip ip_ire_redirect_interval
60000

ただ時間の単位がわからなかったんですよね。
おそらくミリ秒じゃないかなと思うんですが。。


このあたりのパラメータが、/dev/ip ドライバの設定パラメーター[nddコマンド][NICドライバ、TCP/IPパラメータ関連] - Solaris Userが参考になります。
nddコマンドについては、Solarisネットワークチューニングが参考になります。


今回は、同じセグメント内にルータ一つとL3スイッチが1つ有り、デフォルトゲートウェイになっているL3スイッチが気をきかせすぎてもう一つのルータ向けの通信を検知するとICMPリダイレクトパケットを流していたようです。
こう考えると、一つのセグメントには一つのゲートウェイだけ持たすのがシンプルでいいですね。

参考:
ルーティング設定 | hajichan.net technical version
私的備忘録兼つぶやき:Solaris10 静的ルートの追加と削除
富士通:ネットワークの設定/表示:ルーティング情報の設定
[PR]
by Jehoshaphat | 2013-03-30 22:57 | Unix | Trackback | Comments(0)
Windows7のIE8でリンクが動作しない時がある
Windows7(x86)上のIE8で、突然ファイルのダウンロードができなくなりました。(保護モードは無効です)
ファイルのダウンロードリンクを押下しても全然反応しないのです。
それだけでなく、マウスのホイールボタンを使って新しいタブでリンクを開くという操作をよくするのですが、それもダメです。(タブに接続中...と表示されたままで開きません)
リンク先のアドレスをコピーしてアドレスバーに入れると、開きます。

いろいろググった結果、MS Anwers:[Win7・IE8] Internet Explorer 8 でリンクが開かないで、同様な現象が質問されてました。

上記リンクにあるhttp://iefaq.info/index.php?action=artikel&cat=42&id=133&artlang=enから、ie8-rereg.zip をダウンロードし、中にあるコマンドファイルを右クリック→管理者で実行→再起動で治りました。


regsvr32 でIEのCOMコンポーネントを片っ端から再登録してやればいいようです。

追記(2012/12/28):
IE7~IE9までの現象に対応するようになっているようです。
IEが32bitを使用しており、OSが64bitなら ie8-rereg.32on64.zip をダウンロードする必要があります。
IEが64bitを使用しており、OSが64bitなら ie8-rereg.64on64.zip をダウンロードする必要があります。



参考:
MSサポート:Internet Explorer でリンクをクリックしても何も起こらない
MSサポート:新しい Internet Explorer ウィンドウを開くことができない、またはリンクをクリックしても何も起こりません
[PR]
by Jehoshaphat | 2013-03-29 22:55 | 豆知識 | Trackback | Comments(0)
Microsoft UpdateでWord/Excelビューアのパッチ当てたら関連付けを勝手に変更された
ターミナルサーバで、メインのOffice suiteとしてOpenOfficeを使用してます。
が、なぜか Word/Excelビューアも入ってます。
doc,xlsファイルの関連付けはOpenOfficeに設定しているのですが、WindowsUpdateでWord/Excelビューアのセキュリティパッチを当てたら、勝手に全ユーザの関連付けを変更しやがりました。
doc,xlsファイルをビューアーで開くようにされてしまったのです。
(ユーザが個別に設定して場合は影響有りませんでした)


フォルダオプションで設定してもいいのですが、ユーザ単位の設定となってしまっては面倒なので、レジストリを直接触ることにしました。


で、参考にさせてもらったのが、Windows の関連づけ設定の仕組みです。
これを見ると、ユーザごとの関連付け(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\)が最優先で動くようです。

今回、パッチによって変更されていたのは HKEY_CLASSES_ROOT\* (Basic Class Key)でした。
(ちなみに、HKEY_CLASSES_ROOT は HKEY_LOCAL_MACHINE\Software のサブキーです。)

ビューアで開く関連付けファイルだと以下のようになってました。
(エキサイトブログのダメ仕様上一部.の前に半角スペースを置いています。実際は半角スペースを.の前の半角スペースを削除してください)

HKEY_CLASSES_ROOT\.doc
(既定)=Wordview.Document .8
"Content Type"="application/msword"

HKEY_CLASSES_ROOT\.xls
(既定)=ExcelViewer.Sheet.8

HKEY_CLASSES_ROOT\.docx
(既定)="Word.Document .12"
"Content Type"="application/vnd.openxmlformats-officedocument .wordprocessingml.document"


HKEY_CLASSES_ROOT\.pptx
(既定)="PowerPointViewer.Show.12"


これを以下のように修正したら、全ユーザでOpenOfficeで開くようになりました。(個別設定しているユーザ以外)

HKEY_CLASSES_ROOT\.doc
(既定)=OpenOffice.org.Doc
削除 → "Content Type"="application/msword"

HKEY_CLASSES_ROOT\.xls
(既定)=OpenOffice.org.Xls

HKEY_CLASSES_ROOT\.docx
(既定)=OpenOffice.org.Docx
削除" → "Content Type"="application/vnd.openxmlformats-officedocument .wordprocessingml.document"

HKEY_CLASSES_ROOT\.xlsx
(既定)=OpenOffice.org.Xlsx

HKEY_CLASSES_ROOT\.pptx
(既定)="OpenOffice.org.Pptx"


この(既定)の値は、ProgID Key というものらしく、HKEY_CLASSES_ROOT\OpenOffice.org.Doc にアイコンや実際の動作の挙動が書いているようです。


関連付けは結構厄介ですね。

参考:
OKWave:ファイルの「関連付け変更」は、どこに記録されるの?
[PR]
by Jehoshaphat | 2013-03-29 22:45 | 豆知識 | Trackback | Comments(0)
Java,AdobeReader,FlashPlayerで更新通知を出さない方法
ターミナルサーバで、AdobeReaderやFlashPlayerを入れていると、一般ユーザがログインするたびに更新を促すメッセージが表示される場合があり、ユーザを困惑させかねない場合が少なく有りません。


ということで、AdobeReader,FlashPlayer関連で更新通知等の情報を表示させない方法です。

AdobeReaderの更新通知
管理者権限で、AdobeReaderを起動し、メニューバーの編集→環境設定→アップデータ→アップデートのダウンロードやインストールを自動的に行わない にチェックを付けます。
これは以下のレジストリでも設定できるようです。

HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Adobe ARM\1.0\ARM
"iCheck"の値
0: アップデータのダウンロードやインストールを自動的に行わない
1: (使用されていません)
2: アップデートを自動的にダウンロードするが、インストールするときは指定する
3: 自動的にアップデートをインストールする。


参考:
Adobe:アップデータの自動チェックを変更または無効にする方法

AdobeReaderの品質向上ダイアログ
AdobeReaderでまれに品質向上にご協力ください的なダイアログが出ることがあります。
これも管理者権限でAdobeReaderを起動し、メニューバーのヘルプ→製品向上プログラム で、「いいえ、必要ありません」を選べばOKです。

もしくは、管理者権限のコマンドプロプントで、以下のレジストリを追加するといいようです。

reg add HKLM\SOFTWARE\Policies\Adobe\APIP /v enabled /t reg_dword /d 00000000


参考:
Adobe: 製品向上プログラムのダイアログボックスを停止するには

AdobeReaderのEULA同意する
アップデート後AdobeReaderを起動すると、EULAの同意するかどうかを聞いてきます。
これも管理者権限で最初に同意してしまえば問題ないようです。


FlashPlayerの更新通知
Flashはログインするたびにダイアログウィンドウが出てくるので非常に邪魔くさいです。(特に11.2より前)
Flash Player 10.3以降であれば、コントロールパネルにFlashPlayer設定マネージャーがあるので、それの 高度な設定→アップデートの有無をチェックしない にしておけばいいようです。
Flash Player 10.3より前であれば、グローバル通知設定パネル から設定する必要あるようなので、http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager05.htmlで、リリース情報通知のチェックをのけてしまえばいいようです。

また、mms.cfgを使う方法もあります。
これについての詳細はAdobe Flash Playerをグループポリシーで自動展開したいを参照ください。

参考:
Adobe:設定マネージャー
Adobe:Flash Player による自動更新の通知を無効にする方法


Javaの更新通知
Javaもアップデートの情報をタスクトレイのバルーン表示で通知します。
これは、コントロールパネルの Javaコントロールパネル→アップデートタブ→アップデートを自動的にチェック をOFFにしてしまうといいようです。

参考:
Windows Vista(R)でJavaの最新バージョン更新通知を非表示にする方法


ただ、更新通知を解除する場合は管理者が責任をもって、新しいセキュリティパッチがでたら更新するべき必要がありますね。
[PR]
by Jehoshaphat | 2013-03-28 22:52 | 豆知識 | Trackback | Comments(0)
AdobeReaderXが英語になりPDFが開けない原因は、問題児の保護モード
(AdobeReaderXの時代に書いたメモです)

PCのAdobeReaderを9からX(10.1.11)にしました。

ところが、起動するとなぜか英語表記になってしまいます。

で、環境設定あたりから言語設定できたかなと思い、メニューバーのEdit→Preferencesを実行すると、C++のランタイムエラーとなって落ちてしまいます。
おまけに、PDFファイルを開こうとすると、"There was an error opening this document.Access denied."というエラーになり開けません。
全く使い物にならない状態です。

で、ぐぐったところ、同様の現象の方(C#.NETでいく? :Adobe Reader Xが英語になった上に C++ Runtime Error Adobe Reader Xが英語になった上に C++ Runtime Error)がいらっしゃいました。

どうやら、AdobeReaderXから導入された保護モードが影響しているようです。

保護モードのON,OFFはレジストリで設定できるようです。
以下のregファイルを実行すればOKです。

[HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\10.0\Privileged]
"bProtectedMode"=dword:00000000

ちなみに、上記bProtectedModeの値を 1 にすると保護モードが有効になるようです。(0が無効)

保護モードをレジストリ上で無効にしてやると、ちゃんと日本語表記になってPDFファイルを開けるようになりました。


そういえば、Reader Xにした別の端末でDFS上のPDFファイルが開けないな現象が発生してました。
Adobe:保護モードのトラブルシューティング(Windows 版 Adobe Reader X)を見ると、DFSやNFS上のファイルは開けないことがあるようです。

保護モードを有効にすべきなのはわかりますが、それではDFSバリバリのうちの会社では業務にならないので、全社レベルでAdobeReaderXにする時は上記のレジストリをグループポリシーのログオンスクリプトに仕込もうかと考えてます。

Adobe製品はMS製品のように集中管理する仕組みがないので、情シス泣かせですね。
Lovingly Yours:Adobe Reader Xをインストールすると「保護モード」の影響でOffice文書にPDFオブジェクトが貼り付けられなくなる件でもAdobe製品の集中管理の出来なさを嘆いておられますが、同感です。
[PR]
by Jehoshaphat | 2013-03-28 22:41 | ツール | Trackback | Comments(0)
OpenOffice3.3はWindows7でmsiインストールしようとするとダメっぽい
OpenOfficeをActiveDirectoryで展開するの前半で、グループポリシーの[ソフトウェア]インストール機能を使ってOpenOfficeを展開する方法を書きました。

今回Windowsドメイン内にWindows7の端末が参加するということで、最新版である OpenOffice3.3 をグループポリシーの[ソフトウェア]インストール機能で展開しようと試みました。

しかし、どうもうまく行きません。

試しに、MSIファイルをWindows7上で実行すると、 setup.exeを使用してインストールを開始してください。 と怒られます。

なので、Windows7の端末でサイレントインストールするには、バッチで以下のようにやるしか無いようです。

setup.exe /qn

[PR]
by Jehoshaphat | 2013-03-27 22:39 | OpenOffice | Trackback | Comments(0)
グループポリシーでWindows7のタスクバーを自動的に隠す設定をしたかったけど...

Windows7でタスクバーを最小化にする方法ですが、普通は「タスクバーとスタートメニューのプロパティ」から「タスクバーを自動的に隠す」にチェックするだけです。

これをグループポリシーで一括設定したいと思いました。

WindowsVista,7以降はグループポリシーの設定項目が増えたので、GPOの[ユーザの構成]→[ポリシー]→[管理用テンプレート]→[タスクバーとスタートメニュー]にあるかなと思ったんですが、どうも見当たりません。

仕方ないので、レジストリから設定するかと思って設定前と後のレジストリの差分を取ったんですが、どうやらバイナリで設定されているらしく簡単には設定変更できそうに有りませんでした。

で、いろいろググったところ、Windows Xpにて「タスクバーを自動的に隠す」機能ON/OFFの手順簡.. - 人力検索はてなの回答で以下のVBSが記されていました。

Option Explicit
Dim shell, i
Set shell = CreateObject("WScript.Shell")
shell.Run("rundll32.exe shell32.dll,Options_RunDLL 1")
Do Until shell.AppActivate("タスク バー")
Wscript.Sleep 100
If i > 10 Then Wscript.Quit
i = i + 1
Loop
shell.Sendkeys("%U{ENTER}")


上記のVBSは、ほんとにタスクバーとスタートメニューのプロパティを表示してショートカットキーで自動最小化の設定を有効にしているようです。
なので、もう一度実行すると、設定が解除されます。

プロパティウィンドウが表示されるので、見苦しいですが、他にいい方法は見つかりませんでした。
グループポリシーのログオンスクリプトに設定して、1回だけ実行してやるといいかもしれません。

グループポリシーで、1回だけバッチやスクリプトを実行するには、WindowsServer2008やVista,7ではこれ、結構使えます。グループポリシー基本設定 - Windows Server 使い倒し塾 - Site Home - TechNet Blogsが参考になります。
WindowsServer2003,XPのグループポリシーの場合、MSサポート:ログオン スクリプトの実行を新規ユーザーの初回ログオン時に限定する方法が参考になります。


参考:
Windows のタスクバーを完全に消す - by edvakf in hatena タスクバー自体を隠してしまう場合は、APIで設定できるようです。
[PR]
by Jehoshaphat | 2013-03-27 22:37 | 豆知識 | Trackback | Comments(0)
Windows7でクラシック表示にするグループポリシー
Windows7のAeroを無効にして、クラシック表示にするためのグループポリシーの設定です。

[ユーザの構成]→[ポリシー]→[管理テンプレート]→[コントロールパネル]→[特定の視覚スタイル ファイルを強制するか、または Windows クラシックを強制する]の設定を、有効 にして、[視覚スタイルファイルへのパス]を空欄にするといいようです。

ただし、Aeroが無効になっただけで、Windowsクラシックスタイルになっていない場合もありました。

そういう場合はテーマファイルを[視覚スタイルファイルへのパス]に指定してやると言いようなんですが、WindowsクラシックスタイルのテーマファイルをWindows7は持ってないようです。

なので、[個人設定]のウィンドウから、[Windowsクラシック]テーマを選び、テーマの保存を行います。
すると、C:\Users\ユーザ名\AppData\Local\Microsoft\Windows\Themas フォルダにテーマファイルが作成されます。
このテーマファイルを共有フォルダに置くなりして、そのパスを[視覚スタイルファイルへのパス]に指定してやることができます。
[PR]
by Jehoshaphat | 2013-03-26 22:36 | 豆知識 | Trackback | Comments(0)
グループポリシーでWindows7のアクションセンター非表示にする
グループポリシーで、Windows7のアクションセンター(バックアップできてねーよとか問題あるぞとかタスクトレイで通知するお節介な機能)を非表示にする方法です。

[ユーザーの構成]→[管理用テンプレート]→[タスク バーと スタート メニュー]→[アクション センター アイコンを削除する]を有効にするといいようです。

参考:
TechNet:アクション センターのグループ ポリシー設定
アクション センター - Windows 7 の機能 - Microsoft Windows
[PR]
by Jehoshaphat | 2013-03-26 22:35 | 豆知識 | Trackback | Comments(0)