Windowsで綺麗なフォントを使うためのフリーソフトのひとつに、MacTypeがあります。
オープンソースっぽいところに置かれていてライセンスも記載されているものの、ソースは公開されていないという若干怪しいソフトです。セキュリティ系の怪しい挙動はまだ報告されてはいないようですが、どうも環境変数周りでバグを抱えている模様。
Windowsにはシステム環境変数とユーザー環境変数があります。
参考:.Windowsのシステム環境変数とユーザ環境変数
そしてPATHは本来ユーザー側で指定したところにも通るはずですが、なぜかMacTypeがそれを壊してしまうようです。ユーザー環境変数で指定したところにあるプログラムが起動できず、あちこちで不具合を起こすことがあります。起きる環境と起きない環境がありますが。
もし発生した場合、MacTypeの常駐プログラム(MacTray)の設定にある「Windows開始時に起動」を外すことで、これを回避できています。
なぜかユーザー側の環境変数PATHが消されて、システム環境変数PATHが「元々指定していたシステムPATH:MacTypeのバイナリへのパス」に置き換わっているので、MacTypeが勝手にPATHをいじる過程で何かが起きているのではないかと思われます。
2015年2月26日木曜日
2013年9月7日土曜日
Windowsのプログラムの標準出力とリダイレクトと
Windowsでもコンソールアプリから…
このようにすると、標準出力がファイルにリダイレクトできます。
ところが微妙に複雑な仕様があるらしく、若干うまくいかなかったのでメモ。
普通に実行すると、標準出力にテキストを色々吐くプログラムがあり…
リダイレクトしなかった場合の出力: (実際には微妙な色で装飾される)
リダイレクトした場合にファイルに書かれる内容:
そういう挙動が嫌なら、WriteConsoleは使わずにWriteFileを使うのがよさそうです。着色のために呼ぶConsole関係の関数が失敗しても、気にせずWriteFile。
Z;\>hoge.exe > log.txt
このようにすると、標準出力がファイルにリダイレクトできます。
ところが微妙に複雑な仕様があるらしく、若干うまくいかなかったのでメモ。
状況
普通に実行すると、標準出力にテキストを色々吐くプログラムがあり…
Z;\>hoge.exe I love beef! I love pork!ファイルにリダイレクトすると、出力されないものがある。どういうこっちゃ。
Z;\>hoge.exe > log.txt Z;\>type log.txt I love beef!
解明
テスト用のソースコードは以下。リダイレクトしなかった場合の出力: (実際には微妙な色で装飾される)
GetConsoleScreenBufferInfo: OK SetConsoleTextAttribute: OK I love beef! WriteConsole: OK I love pork! WriteFile: OK
リダイレクトした場合にファイルに書かれる内容:
I love pork! GetConsoleScreenBufferInfo: NG SetConsoleTextAttribute: NG WriteConsole: NG WriteFile: OK
- ファイルにリダイレクトされた場合、Console関係の関数は失敗する
- WriteConsole
- GetConsoleScreenBufferInfo
- SetConsoleTextAttribute
- WriteFileはリダイレクトの有無にかかわらず成功する
- (w)printfはリダイレクトの有無にかかわらず成功する
そういう挙動が嫌なら、WriteConsoleは使わずにWriteFileを使うのがよさそうです。着色のために呼ぶConsole関係の関数が失敗しても、気にせずWriteFile。
登録:
投稿 (Atom)