問題タブ [pywin32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
py2exe - Python 2.6 での win32file.pyd のロードに関する問題
win32file を使用する単純なスクリプトでさえ、py2exe を正しくパックすることができません。常に次のエラー メッセージが表示されます。
スクリプトは次のようになります。
そして、ここに setup.py があります:
以前にも同様の問題がありましたか?
バージョン:
ターゲット マシンとしての Python 2.6.2、py2exe 0.6.9、pywin32-214、Windows 7 および Windows XP Pro
アップデート:
- バンドルされたプログラムは、それが作成された Windows 7 で実行できますが、XP マシンでは実行できません。
エラーをスローする win32file.pyc の部分は次のようになります。
/li>
テスト ボックス (Windows XP) ではエラーが返されますが、開発ボックス (Windows 7) では上記の行が正しく実行されます。
** 更新 2: **
imp.load_dynamic を使用して win32file フォーム python インストールをロードすると、エラーなしで dist フォルダーの win32file.pyd をリロードできます。
python - Windowsのシンボリックリンク?
Python から win32 のバージョン間でシンボリック リンクを作成/読み取る方法を知っている人はいますか? アプリをクロスプラットフォームにする必要があるため、プラットフォーム固有のコードは最小限にするのが理想的です。
python - Pywin32 を使用しない Python での Vista/7 でのシンボリック リンク (mklink) の検出
現在、ビルドアウト レシピ collective.recipe.omelette は、Windows のすべてのバージョンで junction.exe を使用してシンボリック リンクを作成します。ただし、junction.exe は既定では Windows に付属しておらず、最も重要なことに、ファイル (ディレクトリのみ) へのシンボリック リンクの作成をサポートしていないため、かなりの数の Python パッケージで問題が発生します。
NT6+ (Vista および 7) では、mklink ユーティリティがデフォルトで付属するだけでなく、ファイルやディレクトリへのシンボリック リンクを作成できるようになりました。可能な場合はこれを使用するように collective.recipe.omelette を更新したいと思います。それ以外の場合は単純な機能が 1 つあります。ファイルまたはフォルダーが実際にシンボリックリンクであるかどうかを検出します。これは小さなビルドアウト レシピであるため、私の意見では Pywin32 を必要とするのは少し多すぎます (setuptools が Windows でしかダウンロードできない場合を除きます)。
現在 Windows で omelette が行っていることは、フォルダーで junction.exe を呼び出し、"Substitute Name:" の応答を grep することですが、mklink ほど単純なものは見つかりません。
私が考えることができる唯一の方法は、ディレクトリで「dir」を呼び出してから、「<SYMLINK>」と同じ行のフォルダー/ファイル名を探して、応答を1行ずつ調べることです。確かにもっと良いものがありますか?
python - Pythonを介したWMI呼び出しのWindows偽装?
PyWin32 を使用して、django Web アプリケーションから Python でシステムへの WMI 呼び出しを行っています。私の目標は、ユーザーが Web インターフェイス経由でシステムにプリンターを追加できるようにすることです。これを行うために、win32print.AddPrinterConnection を使用しています。
これは、私のユーザーアカウントで開発サーバーを実行するとうまくいきます。必要なすべてのプリンターを追加できます。ただし、最終的には、これは LocalSystem アカウントとして実行される apache の下で実行する必要があります。
これには、次の 2 つの理由で問題があります。
- LocalSystem アカウントにはネットワーク特権がまったくなく、これはネットワーク プリンターです。AddPrinterConnection WMI 呼び出しは、最終的に許可されない COM 呼び出しを行います。
- LocalSystem アカウントには、これらのプリンターが存在するドメインへのアクセス権がありません。アクセスするにはドメイン アカウントが必要です。
したがって、このタスクを実行するにはドメイン ユーザーを偽装する必要があるという結論に達しました。ここにあるコードを使用してそうしました:
http://code.activestate.com/recipes/81402/
呼び出しコードの偽装に成功したことを確認できるため、これは機能しているようです。残念ながら、なりすましの後、常に win32print.AddPrinterConnection API 呼び出しからこのエラーが発生します。
これがなぜなのか分かりますか?
本当にありがとう!ピート
アップデート
遊んでみると、偽装しているユーザーが現在システムにログインしている場合、AddPrinterConnection API 呼び出しが正常に完了することに気付きました。そのユーザーをログアウトし、そのユーザーになりすましてコマンドを再試行すると、上記のエラーが発生します。
ここで何が起こっているのですか?
python - python win32 拡張機能のドキュメント
http://python.net/crew/skippy/win32/で入手できる python と python win32 拡張機能の両方を初めて使用しますが、win32 拡張機能が正確に何を提供するかについて、オンラインまたはインストール ディレクトリでドキュメントを見つけることができません。この情報はどこにありますか?
python - .exeから.icoを抽出し、PyQtでペイントする最良の方法は?
Pythonを使用して.exeファイルからアイコンを抽出する方法を探しています。win32guiのExtractIconEx関数を使用して.exeのアイコンを取得できることは知っていますが、PyQtを使用してアイコンをペイントしたいので、これはHIconリソースハンドルを返します。
また、win32guiを使用して見た唯一の例には透明性がなく、アイコンが滑らかに見えません。
PythonとPyQtを使用してこれを行うための最良の方法は何でしょうか?
- 編集 -
LukášLalinskýの助けを借りて、この問題は解決されました。これが、私と同じようなことをしようとしている人の最終的なコードです。
python - Updating MS Word (or Open Office) bookmarks with Python
I'd like to fill MSWord bookmarks from a python script. I can't find such functions in win32com(MSWord) or in PyUno(OpenOffice).
Does anyone know how to use bookmarks from Python?
python - Python の Windows では、Outlook API を使用している可能性がありますが、小さい方のログイン名からユーザーのフル ネームを取得するにはどうすればよいですか?
職場では、短いログイン名 (例: hastingsg
) を使用していますが、Outlook と Windows システムの他の部分も長い名前 (例: Jeff Hastings) にアクセスできると思います。
cpython (IronPython ではない) で、ログイン名が短い場合、フルネームを長くするにはどうすればよいですか? pywin32とExchangeCDOがインストールされています。
python - Python Windows サービスの問題 - デバッグ引数を使用すると機能しますが、サービスとして開始すると機能しませんか?
うまくいけば、ここの誰かが私の問題に光を当てることができます:D
選択した Windows/アプリケーション/サービス設定を監視/修復するように設計された Python で Windows XP サービスを作成してきましたが、デフォルトの DCOM 設定に焦点を当てています。
アイデアは、参照用に別のレジストリ キー内の既定の構成をバックアップすることです。30 分ごと (現在はテストのため 30 秒ごと) に、サービスで現在の Windows の既定の DCOM 設定をレジストリからクエリし、結果を既定の構成と比較したいと考えています。不一致が見つかった場合、サービスは現在の Windows 設定をカスタム構成設定に置き換えます。
レジストリのチェック/修復を処理するクラスを既に作成/テストしており、これまでのところ問題なく実行されています.exeにコンパイルしてサービスとして実行するまで。
サービス自体は正常に起動し、定義どおりに 30 秒ごとにループしているように見えますが、レジストリのチェック/修復を処理するモジュールが指定どおりに実行されていないようです。
ログ ファイルを作成したところ、次のエラーを取得できました。
トレースバック (最新の最後の呼び出し):
ファイル "DCOMMon.pyc"、52 行目、RepairDCOM
ファイル "DCOMMon.pyc"、97 行目、GetDefaultDCOM
ファイル "pywmi.pyc"、396 行目、呼び出し
ファイル "pywmi.pyc" 内、189 行目、handle_com_error
x_wmi: -0x7ffdfff7 - 例外が発生しました。
エラー: SWbemObjectEx
-0x7ffbfe10 -
サービスを停止し、デバッグ引数DCOMMon.exe debugを指定して exe を手動で実行すると、サービスが起動して正常に実行され、すべてのタスクが期待どおりに実行されます。私が見ることができる唯一の違いは、サービスがログオンしたユーザーではなくSYSTEMユーザーとしてプロセスを開始することです. 別のユーザーとしてサービスの実行をテストしましたが、違いはありませんでした。
他の考えは、私のサービスの依存関係にwmiサービスを追加することでしたが、正直なところ、それが何をするのかわかりません:P srvany.exeのようなものを使用せずに、PythonでWindowsサービスを作成しようとしたのはこれが初めてです.
昨夜と今日の大部分をグーグルで検索して、py2exeとwmiの互換性に関する情報を見つけようとしましたが、これまでのところ、私が見つけた提案は上記の問題の解決には役立っていません.
任意の提案をいただければ幸いです。
PS: 貧弱なロギングで私を憎まないでください。別のスクリプトからロガーをカット/ペーストしましたが、適切な変更を加えていません。各行が 2 倍になる可能性があります :P. ログ ファイルは次の場所にあります: "%WINDIR%\system32\DCOMMon.log"
アップデート
このプロジェクトを 1 つではなく 2 つの exe ファイルに分割しようとしました。wmi レジストリ部分を実行するために、サービスに他の exe への外部呼び出しを行わせます。繰り返しますが、デバッグ引数を使用して実行すると問題なく動作しますが、サービスとして開始すると同じエラー メッセージがログに記録されます。ますますこれは、プログラムの問題ではなく、許可の問題のように見え始めています:(
アップデート
DCOMMon.py - pywin32、wmi (pywmi に名前変更)、
DCOMMon_setup.py - py2exe が必要です (自己実行可能、py2exe arg は不要)
python - Get process argument info in windows with python/pywin32?
In linux, I know with 'ps' you can get the arguments that a command was run with. I need the equivalent in windows
Right now in python I'm doing
Process[i] = subprocess.Popen(cmd + " --daemon --config " + str(i) + ".conf", shell=False)
But I'm doing this in a daemon that is meant to be up all (or most) of the time. Since I'm having to debug and modify this daemon regularly it's starting up 3 processes; but when I shut it down, the processes stay up. (like should happen, just in case)...
When I start it back up again, I need to re-map the PID to the config file used by the processes that already exist, but I don't know of any way of retrieving this information (and parsing it) in windows. Does such a thing exist?