Windowsバイナリーからリソース文字列を抜き取るC#をgithubにあげた

昨日WSL用bashスクリプトをあげましたがその中で以下の sed による文字列置換してました。これは一部フォルダー名がWSLでは通用しないためです。例えば”C:\ユーザー” です。

s/ユーザー/Users/;s/ダウンロード/Downloads/

WSLのlessでWordファイル、PDFを読む –

“ユーザー”, “ダウンロード” などの文字列がどこに定義されているか調べたら DLL ファイル中ということがわかりました。実行ファイルなので通常の方法では読めません。

Googleって以下見つけて20行分ぐらいコピペしMain()を追加して動作するとこまで確認しました。以下一見Powershellのように見えますがC#のコードが埋め込まれてます。

is PowerShell capable of extract string “Windows Search” out of SearchIndexer.exe?

windows – How to use PowerShell to extract data from .dll or .exe files – Stack Overflow

github は以下です。使い方についてまた書きますね。

Worked on Windows10 Japanese version

Extract_Win10_Bin_Resource/ExtractData.cs at master · inoue-katsumi/Extract_Win10_Bin_Resource

Windows10: CLIでファイル名検索

1年半前にWindows10のファイル名検索について書きました。

Win10でも画像だろうが圧縮ファイルだろうが多くの拡張子のファイルについてはファイル属性(含ファイル名)をインデックスしているはず

Windows 10の検索の問題

WSLでも使えるコマンドライン検索ツールのコンパイルについて最近以下書きました。

SELECT System.ItemPathDisplay FROM SystemIndex where contains(*,’GenericJDBCException’)

WSL: Windows検索のC#をコンパイル

上の例では全文検索の例だったんですが以下はより単純なファイル名部分だけの文字列検索の例です。bash function として定義してます。

$ declare -f wsfn
wsfn ()
{
    WSSQL.exe \
    "SELECT System.ItemPathDisplay,System.Search.GatherTime,System.Title \
    FROM SystemIndex \
    where System.ItemName like '%$1%' order by System.Search.GatherTime" 1024
}

$ wsfn a%.zip のように ‘%’ 文字をSQLと同じように任意の長さの文字列のワイルドカードとして使えます。