- PR -

プリンタドライバ更新時に「abnormal program termination」

1
投稿者投稿内容
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-09-28 13:37
表題の件でなんとか解決の糸口をつかみたいと思い、投稿させていただきます。

【背景】
・ 顧客が使用しているプリンタドライバに不具合が見つかり、バージョンアップを行いたい。
・ 該当端末は200台以上あり、顧客の営業時間等や、作業工数を考えると一台一台
 インストールして回るのはなるだけ避けたい。
・ また顧客はプリンタドライバの更新権限がないユーザーでログインしているので、
端末使用者に各自で更新させるように依頼するのは無理。
・ 弊社製の端末ファイル管理システムがあり、それを使って自動バージョンアップを行いたい。

【弊社製の端末ファイル管理システムの仕様】
・ 各端末にインストールされていて、WindowsサービスプログラムとしてSYSTEM権限で動作している。
・ インストール時にAdministrator権限をもったユーザを作成し、ネットワーク利用が必要な操作は
  全てそのユーザーを偽装して実行している。
・ 偽装はLogonUserとImpersonateLoggedOnUserを組み合わせて行っている。
・ ファイルサーバー上のファイルを更新すると、サービスの起動時(つまりWindowsの起動時)に
 更新チェックが行われ、更新されたファイルをサーバーからコピーする。
 ユーザのログオン時にも同様の処理を実行する。
・ 拡張機能としてファイル更新時に、特定のファイルを実行する機能があります。
 そこでは指定したbatファイルなどを実行することが出来、その偽装したAdministraterユーザーの権限で実行します。
・ 実行の偽装はLogonUserとCreateProcessAsUserを組み合わせて行っている。

【環境】
 ・ 顧客端末は Windows2000 SP4/ XPSP2 のどちらかで運用されています。
 ・ 弊社製端末ファイル管理システムはMSのVisualStadio2003 C++.NETで作成しています。


当初は端末ファイル管理システムを使用して、
バージョンアップ用のプリンタドライバモジュールを各端末にコピーし、
その時にsetup.exeを実行するように指定してやればよいと思っていました。
実際にテストしてみたところ、想定した通りプリンタドライバの更新が成功する事もあるのですが、
多くの場合セットアップ時に
「abnormal program termination」のエラーダイアログが表示されります。結果としてドライバの更新を行うことが出来ません。3

CreateProcessAsUserの実装方法が間違っているのかと、
http://support.microsoft.com/kb/165194/
を参考に実装し直してみたのですが、状況に改善が見られませんでした。

ログオン後、安定した後に同様の処理を実行させると問題なく実行できるので、
Windowsの起動時に更新していることが原因らしいことは想像できます。

どうやらエラーが発生する、しないはsetup.exeを実行するタイミングによる…みたいなのですが確信が持てません。
はsetup.exeの実行がWindowsのログオン画面が表示される前に実行されるとエラーになる確率が高いようです

状況は以上になります。
何かエラーになる原因等に心当たりの有る方、情報のご提供をお願いします。
MARU
常連さん
会議室デビュー日: 2005/02/16
投稿数: 35
投稿日時: 2005-09-29 16:50
自己レスです。

結局、エラーの原因は分からなかったのですが
CreateProcessAsUserで処理をするのをあきらめて
WindowsのRunAsコマンドを利用してAdminister権限でsetup.exe動かす事にしました。

そのbatファイルをユーザーログオンスクリプトに組みんだところ
正常にドライバの更新が行えるようになりました。
1

スキルアップ/キャリアアップ(JOB@IT)