Windows Script Component(以下、WSC)のレジストリ登録時に「適切な名前を指定してください。」というエラーが出る場合というのは、結論から言いますと、XMLの文法に正しく従っていない可能性があります。色々パターンはあると思いますが、自分が陥ったパターンについて書きます。
たとえば、以下のような現在時刻を返すメソッドだけを用意したWSCがあると仮定します。
XML宣言がないWSC
<package> <component id="Hoge"> <registration progid="Hoge.Timer" /> <public> <method name="GetTime" /> </public> <script language="VBScript"> ' << 現在時刻を返す Function GetTime() GetTime = Now End Function </script> </component> </package>
このWSCにはXML宣言がありませんが、レジストリ登録は成功し、GetTimeメソッドも問題なく呼び出すことができます。WSCはXML形式として書くことが一般的ですが、実はXML宣言がなくても動作します。次に、このWSCにXML宣言を付加してみます。
XML宣言のあるWSC
<?xml version="1.0" encoding="UTF-8" ?> <package> <component id="Hoge"> <registration progid="Hoge.Timer" /> <public> <method name="GetTime" /> </public> <script language="VBScript"> ' << 現在時刻を返す ← ここがポイント Function GetTime() GetTime = Now End Function </script> </component> </package>
XML宣言を付加しただけですが、このWSCをレジストリ登録しようとした場合、「適切な名前を指定してください。」というエラーが発生します。
原因
エラーの原因は、XML中に使用できない文字が含まれていたという単純な文法エラーです。
ここがポイントの部分にある「<」という記号は、XMLではタグの開始を表す特殊な記号であり、直接記述してはいけないことになっています。たとえ、コメント行であろうとこれは変わりません。
XML宣言がない場合は、XML文書とみなされないため、この問題は露呈しません。ですが、XML宣言を付加した途端、XML文書としての文法チェックが行われ、この場合には動かないコンポーネントになってしまいます。
僕がハマった事例は、コメント行では、なく単純なif文で文法エラーになっていました。数値を比較する際のif < aという比較記号が使用できない文字に該当していました。
対処方法
対処方法は、通常のXMLと同じで、CDATAセクションとして記号を記述します。
<?xml version="1.0" encoding="UTF-8" ?> <package> <component id="Hoge"> <registration progid="Hoge.Timer" /> <public> <method name="GetTime" /> </public> <script language="VBScript"> <![CDATA[ ' << 現在時刻を返す ← ここがポイント Function GetTime() GetTime = Now End Function ]]> </script> </component> </package>