問題の切り分け – プログラミング – Home

通知
すべてクリア

[解決済] 問題の切り分け


wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

問題の切り分けができず、質問します

1.VC側作成環境
  Windows XP Pro  VC++ 6.0(SP6)
  サービス.EXE     ビルド(Win32 Release Minisize)

2.VB側作成環境(他者作成)
  Windows NT4.0(SP6)
  VB6(SP5)
  ODBCDirectを使いSymfowareデータベースに
  RDA-SV ODBC3.0に接続

3.共用実行環境 
  上記開発環境とは別に  Windows NT4.0WS
  Symfowareデータベース
  それぞれ、ランタイムDLLのバージョンを開発環境で使用しているもの
  にあわせてあります
  
  1で作成したサービスEXEを
  コマンドラインから”サービスEXE /Service”でOSに登録
  サービスマネージャで「デスクトップとの対話をする」にチェックを
  入れてあります

それぞれ、共通でOffice2000(Pro)フルインストール

問題
 2の環境で作成されたVBアプリが、1の環境で作成したサービスEXEから
 CreateProcessにより起動されたときデータベースへの接続ができなくなってしまう

 また、バッチファイルを経由して
 起動前に”CD /D C:\XXX\CCCCとVBアプリが入っているフォルダを
 指定してもDB接続ができません

 ノートパッド、コンソールアプリ、バッチファイルの起動はサービスEXEから
 正常に起動されます
 ほかのDBアプリケーションは試してません

 エクスプローラからVBアプリをダブルクリックで実行すると、正常に実行できます

 そこで、私が作成したサービスEXE側に問題があると思いこちら側に質問を行います

アプリケーション起動に使用しコード(抜粋)
ZeroMemory( &si , sizeof( STARTUPINFO ));
ZeroMemory( &pi , sizeof( PROCESS_INFORMATION ));
si.cb = sizeof( STARTUPINFO );
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;

//
sprintf(CMD,%s %s, ds_GROUP[u_idx].D_CMD , ds_GROUP[u_idx].D_OPT);
RT_CD = CreateProcess( NULL ,CMD ,NULL ,NULL ,FALSE ,

CREATE_NEW_PROCESS_GROUP, // 0

NULL ,NULL ,&si ,&pi);

ds_GROUP[u_idx].D_CMDの値はフルパス
ds_GROUP[u_idx].D_OPTの値はNULL

VBアプリ側の問題なのか、VC側(CreateProcessの使い方)の問題なのか切り分けが
出来ず困っています
もし仮にVBアプリ側だった場合、解説ページ等をご紹介ください

VB側やり取りは、掲示板趣旨と違いますし、私本人の作成物ではございません
ので申し訳ございませんが、作成者に伝えますが、ご返事いたし兼ねることが
ございます(VB側ラウンジへ移動します)マルチにならない様先にこちらで
質問しています

VC側がわであれば、ここで何が変なのか教えてください
よろしくお願いします。


引用未解決
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

ちょっと訂正

(誤)VC側がわであれば、ここで何が変なのか教えてください
   よろしくお願いします。
  ↓
(正)VC側であれば、ここで何が変なのか教えてください


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

「自分ならばこうするだろうか」という観点から。

> 2の環境で作成されたVBアプリが、1の環境で作成したサービスEXEから
> CreateProcessにより起動されたときデータベースへの接続ができなくなってしまう

という記述をみると、「VBアプリの起動はできている」と受け取れます。
質問文からはVCサービスEXEでの CreateProcess は成功しているように受け取れます。

もしそうなら、VBアプリからデータベース接続できない処理を重点的に
調べたほうが良いように思います。

・VBアプリからデータベースへ接続する際のパラメータ
・VBアプリでのデータベース接続失敗時のエラー詳細

質問内容に要求されている回答とは違うかもしれませんが、一応ご参考に。


返信引用
無実績
 無実績
(@無実績)
ゲスト
結合: 21年前
投稿: 1
 

サービルからCreateProcessすると実行ユーザがSYSTEMになってたり
するけどそのあたりは大丈夫なつくりなのかなぁ?VB
CreateProcessAsUserあたりの偽装について調べてみると幸せになれたり。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

レスありがとうございます
>実行ユーザがSYSTEMになってたり
調べ方はわかりませんが、goolgeなどで検索してみます
>CreateProcessAsUserあたりの偽装について調べてみると
調べてみます

でも、何か渡し足りないからVB側がエラー(RDO系)起こすみたいです
今のところ何を渡すべきかいまだ不明です

エクスプローラからの実行はやはり、エラー出ません

ほかのアプリでも結構ですので、似たような経験を解決された方いませんでしょうか


返信引用
mmE
 mmE
(@mmE)
ゲスト
結合: 21年前
投稿: 2
 

>>実行ユーザがSYSTEMになってたり
>調べ方はわかりませんが、goolgeなどで検索してみます

「デスクトップとの対話をする」に設定したんですよね?
同様にサービスマネージャで「ローカルシステムアカウント」を選択して
いれば SYSTEM ですが (^^;
それだと、ローカルシステム上はオールマイティに近いですがネットワーク
参照の権限はありませんね。
ODBC 管理の設定(コントロールパネル)も確認する必要があるんじゃないで
しょうか。自分は DB には詳しくないのでよくわからないですが。

>>CreateProcessAsUserあたりの偽装について調べてみると
>調べてみます

サービス実行のユーザー設定を DB アクセスができている
ユーザーにして実行してみてはいかかでしょう。
もしも CreateProcessAsUser を使うためにプログラム中でユーザーパスワードを
扱う必要が出てくるようであれば、サービス設定で割り当てする運用にしたほうが
セキュリティ上は安全だと思います。


返信引用
mmE
 mmE
(@mmE)
ゲスト
結合: 21年前
投稿: 2
 

あと、他のサービス(DB接続のクライアントサービスとか)に依存するようなら、
そのサービスよりも後に起動されるように設定しておかないと。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

現象再確認しました

VBアプリのエラーは
実行時エラー:-2147467259(80004005)
[Microsoft][ODBC Driver Manager]データソース名および指定された既定のドライバー
が見つかりません

ですがVBアプリに限らず、VC6で作成したODBC接続アプリも同様の現象を発生することが
確認できました

どちらの場合も、ユーザー:Administrator で実行してます


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

Win32 Console アプリから「wood 2004/10/23(土) 08:09:30」に提示したコードで
ODBC接続アプリを起動しましたがエラーは発生しませんでした

サービスとして登録された、アプリケーションから
ODBC接続を利用したアプリケーションを起動(CreateProcess)した場合だけ
ODBC接続の阻害をしているみたいです


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
Topic starter  

以上のことから表題「問題の切り分け」結果として
VCで作成した自作サービスEXEに問題があるようです
目的は達成されたように見える「CreateProcess」の使い方
または実現方法に問題があるようです

何故、目的達成後(他のEXEの実行)の状態に問題が発生してしまうのか不明ですが

レス頂いた方々ご協力ありがとうございました

このスレッドをクローズし、後で別の観点での質問をしたいと思います


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました