ショートカットの読み込みでエラー

Issue #97 resolved
takuto_cw created an issue

おはようございます。どうにも手に負えないバグに遭遇してしまったので、こちらに投下させていただきます。

自分の環境(WinXP SP3)では、d0b6ff5 以降、ショートカットからシナリオを読み込むとエラーが出ます。

CWPy の Scenario フォルダに、「シナリオへの」ショートカットしかない場合、そのシナリオの貼り紙表示までは問題なく動き、シナリオを開始するとエラー&フリーズ。

Exception in thread Thread-3:
Traceback (most recent call last):
(中略)
 File "D:_cwpy\cw\util.py", line 1438, in get_linktarget
  shortcut = wsh.CreateShortcut(file)
 File "<COMObject WScript.Shell>", line 2, in CreateShortcut
com_error: (-2147352567, '\x97\xe1\x8aO\x82\xaa\x94\xad\x90\xb6\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81B', (0, None, None, None, 0, -2147221008), None)

Scenario フォルダに「フォルダへの」ショートカットが存在すると、まず「貼り紙を見る」を実行した時点でエラー。表示されている貼り紙を切り替えて、該当フォルダを表示した段階でまたエラー。ちなみにエラーを表示するたび、「Exception in thread Thread-(数字):」の数字が大きくなっていきます。不気味。

com_error でぐぐっても分からなかったので、d0b6ff5 を眺めてみたものの……if 文分岐を外せば不具合がなくなりますが、ここを削ると高速化にならないし、じゃあ他にどうすれば?…という状況です。

お手数をおかけいたしますが、一度見ていただいてよろしいでしょうか? よろしくお願いします。

Comments (7)

  1. k4nagatsuki repo owner

    ありがとうございます。そういえばこの手の問題を以前にも見たような……それを忘れてまたやってしまったのかもしれません。

    pull request #72を作成しました。このパッチで改善するかどうか見ていただけないでしょうか(私の開発用リポジトリからpullする事で手許で確認できます。確認後はrollbackすればOK)。

  2. Former user Account Deleted

    ありがとうございます。さっそく開発用から pull して動かしてみました。

    今回は、まず起動直後に次のようなエラーが出るようになりました。

    Exception in thread Thread-2:
    Traceback (most recent call last):
     File "C:\Python27\lib\threading.py", line 808, in __bootstrap_inner
      self.run()
     File "D:_cwpy\cw\scenariodb.py", line 35, in run
      db.update()
     File "D:_cwpy\cw\util.py", line 1417, in acquire
      return f(args, *kw)
     File "D:_cwpy\cw\scenariodb.py", line 107, in update
      ltarg = cw.util.get_linktarget(path)
     File "D:_cwpy\cw\util.py", line 1436, in get_linktarget
      win32com.shell.shell.IID_IShellLink)
    com_error: (-2147221008, 'CoInitialize \x82\xcd\x8c\xc4\x82\xd1\x8fo\x82\xb3\x82 \xea\x82\xc4\x82\xa2\x82\xdc\x82\xb9\x82\xf1\x81B', None, None)

    「張り紙を見る」をクリックすると、Scenarioフォルダが空だろうがフリーズします。曲が流れたまま応答なしの世界へ。

    ……せっかくお時間を割いてくださったのに申し訳ありませんが、このような結果に……。うーん、何がどうダメなんだろう。

  3. Former user Account Deleted

    作業ありがとうございます。症状には変化なく、エラーメッセージの最後の3行だけ変わりました。

    (略)
     File "D:_cwpy\cw\scenariodb.py", line 107, in update
      ltarg = cw.util.get_linktarget(path)
     File "D:_cwpy\cw\util.py", line 1443, in get_linktarget
      shortcut.QueryInterface(pythoncom.IID_IPersistFile).Load(file)
    com_error: (-2147024894, '\x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83t\x83@\x83C\x 83\x8b\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B', No ne, None)

  4. k4nagatsuki repo owner

    エラーメッセージからすると、ファイルが見つからないというエラーが出ているようですね。ファイルシステムの文字コードの問題かもしれません。

    文字コードを変換して処理を行うようにしてpushしてみました。これならどうでしょうか。

  5. takuto_cw reporter

    無事動くようになりました! ありがとうございます。起動直後のエラーも出ないし、フォルダ・シナリオ両方のショートカットが正常に動作することを確認いたしました。お疲れ様です。

  6. k4nagatsuki repo owner

    検証ありがとうございました。問題解決ということでマージしておきます。

  7. Log in to comment