MS-Windowsのバグのメモです。
暗号化されたファイルをネットワーク上の別マシンにコピーしようとすると、暗号を解除しなければならない。[2008-05-17]
その為に「暗号化されたファイル」ダイアログが開き、コピーしていいかどうか聞かれる。
(暗号化を失わないでコピーしたり移動したりできません 「無視(I)」「すべて無視(A)」「キャンセル」)
ここで「無視」や「全て無視」を選べば暗号が解除されてコピーされる。
はずなのだが、コピーされずに固まることがある。
また、
コピー先には0バイトのファイルが出来て、削除できない。
「キャンセル」を選んでも0バイトのファイルが出来てしまう。
この環境では、ネットワーク上のコピー先マシンがLinux(RedHat7.2)でsambaを使用しており、
コピー元のWindowsXP(SP2)マシンにはノートンAntiVirus・OfficeGear・PC
Gurdianといった怪しいソフトが色々入っているので、
何かが悪さをしているか、相性が悪いのかも。
なお、上記の0バイトファイルは、Linux側からは削除可能。
WindowsXPのコマンドプロンプトのDOSコマンドにforがある。[2008-08-08]
その変数加工の一つに「%~s」という、Windowsの「長いファイル名(ディレクトリー名)」を(いわゆる「8.3形式」の)「短縮名」に変換する指定がある。
で、これが正しい短縮名に変換できないことがある。
C:\>dir /x "C:\Program Files\Java" 〜 2006/11/14 21:44 <DIR> JDK15~1.0_0 jdk1.5.0_09 2007/02/11 18:55 <DIR> JDK16~1.0 jdk1.6.0 〜 C:\>for %i in ("C:\Program Files\Java\jdk1.6.0") do dir /b %~si C:\>dir /b C:\PROGRA~1\Java\JDK16~1.0.6.0 ファイルが見つかりません
「jdk1.5.0_09」だとちゃんと表示される。
いろいろ試してみた結果、ディレクトリー名にスペース入りの長い名前(例えば「Program Files」や「Documents and Settings」など)が含まれ、その下でさらに短縮名になるようなファイル名・ディレクトリー名があるとき、長い名前の末尾が変換された短縮名にくっついている模様。
検証用コマンド
cd \
mkdir "spacename 1234"
cd "spacename 1234"
echo foo>a.b.c
dir /x
for %i in (*) do dir /b %~si
dir /xで正しい短縮名が表示されるが、%~sで表示した短縮名と異なっている。
C:\spacename 1234>dir /x 〜 2008/08/08 06:35 5 AB26C2~1.C a.b.c 〜 C:\spacename 1234>for %i in (*) do dir /b %~si C:\spacename 1234>dir /b C:\SPACEN~2\AB26C2~1.Cc ファイルが見つかりません
ディレクトリー名(スペースの左側)を長くしてやると…
C:\spacename12 1234>for %i in (*) do dir /b %~si
C:\spacename12 1234>dir /b C:\SPACEN~1\AB26C2~1.Cb.c
ファイルが見つかりません
C:\spacename1234 1234>for %i in (*) do dir /b %~si
C:\spacename1234 1234>dir /b C:\SPACEN~1\AB26C2~1.Ca.b.c
ファイルが見つかりません
C:\spacename123456 1234>for %i in (*) do dir /b %~si
C:\spacename123456 1234>dir /b C:\SPACEN~1\AB26C2~1.C4\a.b.c
指定されたファイルが見つかりません。
マイクロソフト、バカじゃねーか。スペース入りの名前使うのやめろよなー。
自分が設計書を書くとき(設計をするとき)には絶対スペース入りのディレクトリー名やファイル名は使わないが、
マイクロソフトは「Program Files」とか「Documents and
Settings」とか、マイクロソフト自身がわざわざバグを作り出すディレクトリー名を使って、自らそれに引っ掛かってやがる。
それどころか、「Program Files」みたいなところにソフトをインストールしなきゃいけないもんだから、他人への影響も出てくる。
あるプログラムから外部のバッチファイルを実行する際に、「Keyboard History Utility」でエラーが発生することがある。[2008-12-29]
(「Keyboard History Utility」というのは、doskey.exeのアプリケーション名らしい)
外部バッチの実行方法によって発生したりしなかったりするようだが、詳細は不明。
少なくとも、WindowsXP(SP3)のSubversion1.5.4の一部のフックで発生する。
エラーダイアログ名 | Keyboard History Utility |
エラーメッセージ | 問題が発生したため、Keyboard History Utilityを終了します。 |
エラー報告に含まれるデータ | szAppName : doskey.exe szAppVer : 5.1.2600.0 szModName : doskey.exe szModVer : 5.1.2600.0 offset : 00001a1a |
バッチファイルを実行する為に、コマンドプロンプト(cmd.exe)を起動していると思われる。
そしてAutoRunで初期化バッチを指定していて、その中でdoskeyによってエイリアスを定義していると駄目なようだ。
AutoRunで初期化バッチを実行するのをやめるか、初期化バッチの中でdoskeyを使うのをやめれば、この障害は発生しなくなる。
参考: xaiさんのC言語を始めよう! doskeyのエラー
普通のWindowsユーザーがマイクロソフトにWindows(OS)のバグを直接通知する手段は無い。[2008-08-08]
仕様バグというのは、“ユーザーが(自然に)思うような動作”にならないこと。[2008-05-17]
「仕様自体がバグだ」という意味
機能 | 仕様バグ |
---|---|
エクスプローラーのコピー動作 | タイムスタンプが新しいファイルだけをコピーする、という機能が無い。 (仮にこの機能があっても、Excelファイルの様に、開いただけでタイムスタンプが新しくなってしまうようなファイルもあるが) |
エクスプローラー上の選択肢移動 | エクスプローラーでファイルやディレクトリの一覧が表示される。 その中にショートカット(リンク)があって、なおかつネットワークが切断されていたりして存在しない先を指している場合、 カーソルキーでの移動やマウスでの移動でそのショートカットをたまたま指してしまうと、 そこでカーソルやマウスの動きが止まる(固まる)。 使いもしないリンク先を見に行くな! |