‘未分類’ カテゴリーのアーカイブ

ビルド時ぬるり

以前Visual Studio 2005で作ったプロジェクトをベータ版のVisual Studio 2010に持ってきて、NotifyIconとContextMenuStripを追加しようとしたら、ビルド時に
オブジェクト参照がオブジェクト インスタンスに設定されていません。 Form1.resx
というエラーが発生。

どうも.NET Frameworkの2.0のDLLを参照しているのにForm1.resxでは4.0とか書いてあるのが問題のような気がするのだけど…?
参照先のパスはこんな感じ。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll

何とか変更しようと試みたけど、参照削除→新しいファイル追加でも、古いほうのDLLを見に行ってしまうみたいで、書き換えられず。
結局プロジェクトのターゲットフレームワークを.NET 3.5にしていたのが問題のようなので、4.0にしてみたら一応通りました。

配布できるのか?これ。


py2exe+wxPythonでmyole4axが見つからないと言われる問題

新規にPython環境セットアップして、何はともあれ既存のファイルに対してpy2exeをやろうとしてはまったメモ

py2exeでexe化したファイルを実行すると、下記のようなエラーが発生する。Pythonのバージョンは2.5と2.6のどちらでも再現。

  File "zipextimporter.pyo", line 82, in load_module
  File "wx\lib\flashwin.pyo", line 15, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "wx\lib\activex.pyo", line 44, in <module>
ImportError: cannot import name myole4ax

myole4axって何ぞ?

ファイル名  C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\lib\activex.py
44行目

from comtypes.gen import myole4ax

C:\Python25\Lib\site-packages\comtypes\comtypesフォルダはあるけど、C:\Python25\Lib\site-packages\comtypes\comtypes\genフォルダがありませんよ…

wx\lib\activex.pyの該当部分の周りを見てみると、

import wx

import ctypes as ct
import ctypes.wintypes as wt
import comtypes
import comtypes.client as cc
import comtypes.hresult as hr

import sys, os
if not hasattr(sys, 'frozen'):
    f = os.path.join(os.path.dirname(__file__), 'myole4ax.tlb')
    cc.GetModule(f)
from comtypes.gen import myole4ax

ということで、cc.GetModule(f)が実行されると、comtypes.genが生成されるってことなんですね。つまりpy2exeでexeにする前に一回実行しておく必要あり。

py2exeでは実行はせずにファイルをパッケージ化しているだけだから、生成されないままパッケージ化されてしまうというわけ。

もしくはこんな風に手で実行してもOK。

>>> import wx
>>>
>>> import ctypes as ct
>>> import ctypes.wintypes as wt
>>> import comtypes
>>> import comtypes.client as cc
>>> import comtypes.hresult as hr
>>>
>>> import sys, os
>>> f = os.path.join(r"C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\lib", 'myole4ax.tlb')
>>> cc.GetModule(f)
# Generating comtypes.gen._99AB80C4_5E19_4FD5_B3CA_5EF62FC3F765_0_1_0
# Generating comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0
# Generating comtypes.gen.stdole
# Generating comtypes.gen.myole4ax
<module 'comtypes.gen.myole4ax' from 'c:\Python25\lib\site-packages\comtypes\gen
\_99AB80C4_5E19_4FD5_B3CA_5EF62FC3F765_0_1_0.py'>
>>> 

comtypes.gen.ShockwaveFlashObjectsも同じようにエラーが出る場合があるので、同じ手段で対処できます。


Chromeでキャッシュ先を変更してパフォーマンスを上げる

最近ハードディスクがアクセスされっぱなしになって、PC全体のパフォーマンスが著しく落ちると言う現象に悩まされていたのですが、どうやらGoogle Chromeが問題だった模様。

起動しっぱなしにしておくと、キャッシュの整理を始めるのか、一回アクセスが始まると数時間止まらないなんてことも。

で、とにかくディスクアクセスがボトルネックなので、メモリ上か、さもなくば別ドライブに展開してほしい。

ということで調べたら、キャッシュ先を別のフォルダに指定する起動オプションがあるようです。

–disk-cache-dir="Z:\cache"

これでRAMディスク上にキャッシュ展開すれば速くなりますね。

詳しい設定方法は "続"Google chromeのキャッシュをRAMディスクに移動させる – consbiol のエコ日記 を参照のこと。

今使ってる通常版のChrome 3.0.195.38でも使えました。

NTFSのジャンクションを使って実現する方法が結構検索に引っ掛かってくるけど、今はこっちの方が圧倒的に楽なのでオススメ。


devcon.exeのログ

Windows 7でのユーザーモードドライバ開発、inxファイルを作ってdevcon.exeでドライバをインストールしようとして、

devcon.exe failed.

と表示された場合は

C:\Windows\inf\setupapi.dev.log

をチェックする。

行頭に!!!が付いている行がエラー。