1

背景:
古いインストール パッケージ (1998 年に作成) をインストールすると、サービスは問題なく開始されます。このパッケージは InstallShield を使用して作成されており、プロジェクト コードは使用できません。ローカル展開を使用しており、依存するすべての DLL は bin ディレクトリにあります。カスタムのinstallservice.exe (このコードも利用できません) を使用して、lp30.exeを Windows サービスとしてインストールしました。

私がやっていること:
VS 2010 を使用して win2k8 で動作するインストール可能なパッケージを作成する必要があります。

問題:
セットアップ プロジェクトで、installservice.exeを呼び出してlp30.exeをサービスとしてインストールするようにカスタマイズされています。しかし、サービスの開始は以下のエラーで終了しています:

 "Error: 1053 The service did not respond to the start or control request in a timely fashion"

分析:
installservice.exeはlp30.exeをサービスとして開始できませんでした。PS2FaxW.dll 関数へのライブラリ呼び出しで失敗しています。これは 1998 年にさかのぼるサード パーティの DLL であり、そのソース コードは入手できません。

DLL はアプリケーション パスで使用でき、レジストリは必要ありません。それらがロードされていることがわかりましたが、dependencywalker でプロファイリングしているときに、以下のエラーが表示されます。

GetProcAddress(0x75790000 [KERNEL32.DLL], "IsTNT") called from "PS2FAXW.DLL" at address 0x10003F81 and returned NULL. Error: The specified procedure could not be found (127).

LoadLibraryA("\LincPag2.dll") returned NULL. Error: The specified module could not be found (126).

そして最後に

Exited "LP30.EXE" (process 0x1DE8) with code 126 (0x7E).    

質問:
サービスを開始するため に、同じ "installservice.exe" と同じアプリケーション ( lp30.exe ) を使用しています。しかし、動作は古いパッケージとは異なります。このシナリオでは他にどのような構成が欠けている可能性がありますか?

4

2 に答える 2

1

サービスの現在のディレクトリは、既定では、「Windows サービスの現在のディレクトリが期待するものではない」にsystem32記載されているフォルダーです。この StackOverflow の質問も参照してください。Windows サービスはどのディレクトリで実行されますか? .

基本的に、サービスは、アプリケーション ディレクトリではなく、system32 から DLL をロードしようとしています。を system32に入れてみてLincPag2.dll、問題が一時的に解決するかどうかを確認してください。system32DLL を入れることが長期的な最善の解決策になるとは思いませんが、デバッグのステップとしては役立つかもしれません。

于 2013-01-04T15:20:24.490 に答える
0

次のようなコマンドライン スイッチでサービスを呼び出してみてください。

LP30.EXE /インストール

LP30.EXE はコンソールに何らかの出力を生成しますか?

「sc」コマンドを使用してみてください。

sc create LP30 binPath= "\"C:\Program Files\Foo\LP30.exe""

他のすべてが失敗した場合は、元の (1998 年) プログラムをProcess Monitorで実行して、その動作を正確に確認してください。

于 2013-01-04T20:34:22.520 に答える