2

CBuilder 6 (ターゲット XP Pro) でサービスを作成しようとしています。このサービスのジョブの一部は、データベースのテーブルを監視および更新することです。データベースへの接続には直接 ODBC を使用しますが、問題は ADO でも発生するため、簡単にするためにそれを使用します。

以下の私のコードを見ることができます。これは、ServiceStart イベントで実行される関数から呼び出されます。

私の問題は、接続を取得できないことです。当社の MSSQL DB はドメイン認証を使用しているため、ドメイン アカウントを使用してサービスを実行してみました。また、ドメイン\ユーザー名とパスワードを明示的に定義しようとしましたが、どちらも機能しません (サービスのプロパティの [ログオン] タブ)。

誰でもこれで私を助けることができますか?何でも大歓迎です。

もう 1 つの質問は、サービスをどのようにデバッグするかということです。リモートデバッガーをインストールしました。rundll32.exe などを使用してプロセスを生成しますか? 繰り返しますが、助けていただければ幸いです。

多くの前もって感謝します

スチュ。

コードスニペット:

TADOConnection* DB = new TADOConnection(this);
  try
  {
    DB->ConnectionString = "Provider=MSDASQL.1;Password=password;Persist Security Info=True;User ID=usernamej;Data Source=datasource";
    DB->Connected = true;

    returnValue = DB->Connected;
    ShowMessage("Connected");
  }
  catch (Exception &exception)
  {
    ShowMessage("Not COnnected");
  }

注: 接続文字列プロパティは単なる指標であり、ユーザー名、パスワード、およびデータベースが変更されています。この文字列をスタンドアロン アプリケーションで使用すると、一貫して接続が成功し、クエリを使用してデータを取得できます。


JP への対応:

こんにちは、JPです。

ご意見をありがとうございます。私は実際にここで例外をスローしていません (これは奇妙です)。コード (下記参照) を修正して、さらにいくつかの msgbox を含めましたが、表示されるのは最初の 1 つだけで、接続を試みています。

ShowMessage("Attempting Login"); 
TADOConnection* DB = new TADOConnection(NULL); 
try { 
  ShowMessage("1"); 
  DB->ConnectionString = "<as before>"; 
  ShowMessage("2"); 
  DB->Connected = true; 
  ShowMessage("Connected"); 
} catch (Exception &exception) { 
  ShowMessage(exception.Message); 
  ShowMessage("Not COnnected"); 

} 

何か案は?接続コンポーネントが作成されていない理由がわかりません (どうなるかを確認するために、所有者をこれから NULL に変更しようとしたことに注意してください)。

ありがとう!

スチュ。

4

2 に答える 2

1

ドメイン認証を使用している場合は、接続文字列にユーザー名またはパスワードを含めないでください。

Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=True;

または、 http://www.connectionstrings.com/sql-server-2005からの適切なバリアント

コンピュータはドメインのメンバーである必要があり、データベースサーバーはそのドメインを信頼する必要があります。このサービスは、コンピューターがメンバーになっているドメインのアカウントで実行されている必要があります。

于 2009-06-21T18:08:06.473 に答える
0

実行しているのは、Windows サービスのアクセス許可の問題です。

  • 基本的に、サービスは権限の低い環境に存在します。

  • イベントログに記録することをお勧めします。

  • 生成されたウィンドウは、Interactive Desktop を有効にして Local Service として実行した場合にのみ表示されます。

于 2009-06-20T16:27:28.120 に答える