掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

Top Index

2014年03月30日
TripleDESで文字列を暗号、復号化する
tdes

VS2010+.NET4


元ネタは「10 行でズバリ !! 暗号化 (VB)」です。
http://code.msdn.microsoft.com/windowsdesktop/10-VB-b16356b0

ほぼこのサンプルで問題ないのですが、暗号化した文字を無理やりユニコードで表示しようと警告が出たような気がします。(うろ覚え)
ですので、その辺をいじくってみました。
以下、要点のソースコード。

続きを読む ...
 
[ 投稿者:mk3008 at 14:30 | VS.NET Tips | コメント(0) | トラックバック(0) ]

Click Once 発行メモ書き
VS2010+.NET4

・手動で発行する手順
http://msdn.microsoft.com/ja-jp/library/vstudio/xc3tc5xx(v=vs.100).aspx
こちらの手順でやれるらしいが結構面倒。

・VisualStudioの発行ウィザードを使う(発行場所をFTPで指定)
普通はこちら。
即時リリースとなってしまうので、納品物を受け渡ししにくい

・VisualStudioの発行ウィザードを使う(発行場所をローカルで指定)
これが無難。
発行場所を「publich\」にしておき、同フォルダに発行をする。

ディレクトリ構造はこんな感じ

例:アプリケーション名が「OfficeTheme」の場合
publish
├─OfficeTheme.application (a)
├─publish.htm (b)
├─setup.exe (c)
└─Application Files (d)
├─OfficeTheme_1_0_0_0 (e)
│ ├OfficeTheme.application (a')
│ ├OfficeTheme.exe.deploy
│ └OfficeTheme.exe.manifest
├─OfficeTheme_1_0_0_1
├─OfficeTheme_1_0_0_2
├─OfficeTheme_1_0_0_3
├─OfficeTheme_1_0_0_4
├─OfficeTheme_1_0_0_5
├─OfficeTheme_1_0_0_6
├─OfficeTheme_1_0_0_7
├─OfficeTheme_1_0_0_8
└─OfficeTheme_1_0_0_9

(a) ClickOnce配置マニフェストファイル
発行バージョン情報が格納されている設定ファイル。
「(a')」に同名のファイルが存在するが、「(a)=最新バージョンの(a')」という関係。
つまり、上述のような発行をしている場合、
「\OfficeTheme.application」と「\Application Files \OfficeTheme_1_0_0_9\OfficeTheme.application」は同一。

詳細は後述するがバージョンアップやロールバックするときに使用できる。

(b) ダウンロードページ
「setup.exe」へのリンクが記載されている。

(c) インストーラー
「(a)」のファイルを元にインストールを行う。

(d) アプリケーションのファイル置き場

(e) バージョンごとのファイル置き場


運用(手動発行)
・ローカルの「publish」フォルダに発行する(この時の発行バージョンは1_0_0_10だったとする)
・「(a)、(b)、(c)」と、バージョン1_0_0_10の(e)」を納品物とする。
 (b)は単なるHTMLなのでは初回のみ納品物に含め、それ以降は不要。
 (c)はバイナリのためよくわからないが、初回のみ納品物に含め、それ以降不要な気もする。
・「(a)、(b)、(c)、(e)」をFTPソフトを使用してアップロード。

運用(ロールバック)
・「(a)」をロールバックしたいバージョンの「OfficeTheme.application」で上書き
 これだけ
 幸いなことに(e)のフォルダに「OfficeTheme.application」がバックアップされているので、
 特別な配慮をしなくても対応可能。
[ 投稿者:mk3008 at 02:06 | VS.NET Tips | コメント(0) | トラックバック(0) ]

2014年03月21日
GACに登録されたDLLの物理パスを調べる
GAC

参考:GAC(グローバル・アセンブリ・キャッシュ)からファイルを取り出すには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/846extratfromgac/extratfromgac.html

・GACのパス
%windir%\assembly

・GACの中身を見る(没その1)
エクスプローラーに「%windir%\assembly」と入力する。
すると通常のフォルダ表示とは異なる専用の画面が出てくる。
インストールされているかどうかはわかるが、物理的な情報は分からない。

・GACの中身を見る(没その2)
コマンドプロンプトで「%windir%\assembly」にアクセスすると普通に見える。
が、見づらい。
なお、GACディレクトリ構造はこんな感じ。
/%windir%\assembly
├GAC
├GAC_32
├GAC_64
├GAC_MSIL
├NativeImages_v2.0.50727_32
├NativeImages_v2.0.50727_64
├NativeImages_v4.0.30319_32
├NativeImages_v4.0.30319_64
├temp
└tmp

※フレームワークのインストール状況によって差あり。
※同フォルダの意味は冒頭のリンク先参照。

・GACの中身を見る(採用)
Windowキーからスタートメニューを開き、「プログラムとファイルの検索」入力欄に「%windir%\assembly\GAC」とフォルダ名まで指定して入力。
すると普通に見える。
ちなみに「上のフォルダ(%windir%\assembly)」に戻っても専用の画面はでないので、とても見やすい。
※エクスプローラーで「%windir%\assembly\GAC」と入力しても「存在しない」エラーがでるので注意。

なお、GAC以下のディレクトリ構造は以下のとおりで、最下層にdllファイルが存在する。
GACにあるdllを強制的に読みたい場合はこの物理パスを使う。
/GAC
└アセンブリ名
 └Version__PublicKeyToken
[ 投稿者:mk3008 at 16:53 | .NET Framework | コメント(0) | トラックバック(0) ]

動的アセンブリロード(意味深)
環境がないのでテストはしていない。
おそらく、ローカル、GACの順に検索されると思われる。
GACを最優先にしたい場合は、GAC物理パスを使用してLoadFromメソッドを使用する。

Imports System.Reflection
Imports System.IO

Module Module1

Sub Main()
Dim asm As Assembly = LoadAssembly("Oracle.DataAccess", "neutral", "89b483f429c47342", {"2.102.1.0", "2.102.2.0", "2.112.1.0", "2.112.2.0"})
Dim t As Type = asm.GetType("OracleConnection")
Dim c As IDbConnection = DirectCast(Activator.CreateInstance(t), IDbConnection)
Return
End Sub

Public Function LoadAssembly(name As String, culture As String, token As String, versions() As String) As Assembly
For Each ver In versions
Try
Dim s As String = String.Format("{0}, Version={1}, Culture={2}, PublicKeyToken={3}", name, ver, culture, token)
Return Assembly.Load(s)
Catch ex As FileNotFoundException
'見つからない場合、次のバージョンを探すため続行する
Debug.Print(ex.Message)
End Try
Next

'例外を起こす
Dim msg As String = String.Format("ファイルまたはアセンブリ '{0}'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。", name)
Throw New FileNotFoundException(msg)
End Function

End Module


続きを読む ...
 
[ 投稿者:mk3008 at 16:12 | VB.NET | コメント(0) | トラックバック(0) ]

一時作業領域の作成、出力、廃棄サンプル
VS2010+.NET4

一時作業領域のパスは「System.IO.Path.GetTempPath」で取得できます。
これを実際に使おうとすると、以下のようなことをします。
・同フォルダ内に一意のフォルダを作る(作業フォルダ)
・作業フォルダ内でファイルを操作
・作業完了後、通常のフォルダ(マイドキュメントなど)に出力
・作業フォルダを廃棄

今まで特に何気なしに、上のようなコードを書いていましたが、
汎用的なやつを一個ちゃんと作ったほうがいいんじゃないかと思いモジュール化しました。


機能
・一意フォルダの自動生成
・一時作業領域へ書き込むためのSteamWriter生成
・一時作業領域のフォルダコピー(出力)
・IDisposableを実装。Using句を抜けたら一時作業フォルダは破棄

備考
Disposeをしているので、正常に処理を抜ける限り一時作業フォルダのファイル、フォルダはUsingを抜けた時にすべて削除されます。
ただし、Using句内で例外が起きた場合はその限りではありません。

使い方


以下、ソースコードべた張り。

続きを読む ...
 
[ 投稿者:mk3008 at 12:49 | VB.NET | コメント(0) | トラックバック(0) ]

2014年03月16日
Officeを模したWPFスタイルサンプル(続)
VS2010+WPF+.NET4

こそっと改良。
・Officeの全配色移植
・ハイライト用配色5種(青、赤、黄、緑、灰)
・ボタンスタイル3種(フロート、フラット、透明)
・トグルボタンスタイルも同様に3種
・データグリッドスタイル1種(フラット)
・Background属性に任意の値を指定可能。
 ボーダーや、背景色はBackground属性値から動的に算出。

new theme

3/29追記
こっそりグレースケールが正しく計算されない不具合を修正。

続きを読む ...
 
[ 投稿者:mk3008 at 11:30 | WPF | コメント(0) | トラックバック(0) ]

2014年03月08日
Officeを模したWPFスタイルサンプル
プログラマにデザインセンスは無い…
かどうかは知りませんが、私にはないので、Office(Excel2010)のデザインをWPFに移植しました。
DataGridのデザインも移植してますので、結構いい感じです。

※Officeには配色が20ぐらいあるんですが、全部移植するのは大変なので、5個程度しかやってません。

※行ヘッダーの背景色も変更できましたが、全選択ボタン(左上のボタン)だけが標準のデザインなままなのはどうかと思ったので、そのままにしておきました。


スタイルを適用したサンプルは続きをご覧ください。(画像でかめ)

スタイルの切り替え方:
動的に切り替えることはできませんので、「/ResourceDictionaries/Theme.xaml」を開いて、3〜5行目にあるMergedDictionariesを適用したいスタイルに変更すればOK。
具体的には

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ResourceDictionaries/ColorSchemes/Office.xaml" />
</ResourceDictionary.MergedDictionaries>



<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ResourceDictionaries/ColorSchemes/Executive.xaml" />
</ResourceDictionary.MergedDictionaries>

こんな感じに変更するだけ。
あとはMainWIndows.xamlを見て使い方を察してください。

参考:
・DataGridTemplateSample
このソースコードを相当参考にしていますが、元ネタのサイトを失念。大変助かりました。
WPF Toolkit DataGrid Sample 06 - Styling the SelectAllRows button
参考にはしていませんが、SelectAllButtonもカスタムできるみたいですね!

続きを読む ...
 
[ 投稿者:mk3008 at 21:03 | WPF | コメント(0) | トラックバック(1) ]