C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

タスクスケジューラからexe実行時に発生する現象

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■91300 / inTopicNo.1)  タスクスケジューラからexe実行時に発生する現象
  
□投稿者/ su (6回)-(2019/06/13(Thu) 14:42:35)

分類:[.NET 全般] 

Visual Studio 2010 Express (C++)を使用しています。
A:自作のコンソールアプリケーション
B:自作のDLL(マネージドクラス使用し、SQL Serverへの接続を可能にしたもの)を使用しています。

AからBを呼び出す、という使い方をしています。

Aは実行ファイル(exeファイル)をダブルクリックして起動させる際には
問題なく実行できるのですが、

タスクスケジューラにAを設定して起動させようとすると
BのDLLコール時に以下の例外が発生し、実行できなくなりました。

ハンドルされていない例外:System.ArgumentException: キー 'data source'の値の長さが、上限の'128'を超えています。
場所 System.Data.SqlClient.SqlConnectionString.ValidateValueLength(String valuem Int32 limit, String key)
・・・

場所 XXXXAPI.{ctor}(XXXXAPI* , SByte* pc)

BのDLLの中で、データベースへの接続文字列を確認しましたが、123文字であり、上限を超えているとは思えません。

問題を解決するためには、どのようなアプローチをしていけばよいか、教えていただけないでしょうか?



引用返信 編集キー/
■91301 / inTopicNo.2)  Re[1]: タスクスケジューラからexe実行時に発生する現象
□投稿者/ su (7回)-(2019/06/13(Thu) 14:48:58)
> BのDLLの中で、データベースへの接続文字列を確認しましたが、123文字であり、上限を超えているとは思えません。

接続文字列については、以下のように確認しました。

    sqlConn = gcnew SqlConnection(ConnString);

sqlConn->ConnString ← これをログに出力して確認
    ("server=XXXX\XXXX;user id=XXXX;password=XXXX;database=XXXX;pooling=true;Connect Timeout=60;"という文字列が得られた)
引用返信 編集キー/
■91302 / inTopicNo.3)  Re[1]: タスクスケジューラからexe実行時に発生する現象
□投稿者/ 魔界の仮面弁士 (2205回)-(2019/06/13(Thu) 16:33:08)
No91300 (su さん) に返信
> タスクスケジューラにAを設定して起動させようとすると
> BのDLLコール時に以下の例外が発生し、実行できなくなりました。

・タスクを実行させるアカウント指定
・ログオン時のみ実行 or ログオンしていなくても実行
・最上位の特権で実行するか否か

のタスク設定を変更しても同じでしょうか。

また、長時間タスクを実行時などではなく、実行後即座に例外になるのでしょうか。


> ハンドルされていない例外:System.ArgumentException: キー 'data source'の値の長さが、上限の'128'を超えています。
> 場所 System.Data.SqlClient.SqlConnectionString.ValidateValueLength(String valuem Int32 limit, String key)

その処理がどこから呼び出されているか、例外のスタックトレースを調べることはできますか?

例外要因となりうる呼び出し元としては、たとえば下記の SqlConnectionString コンストラクタの第 2 引数あたりとか…。
https://referencesource.microsoft.com/#System.Data/fx/src/data/System/Data/SqlClient/SqlConnectionString.cs,534

internal SqlConnectionString(SqlConnectionString connectionOptions, string dataSource, bool userInstance, bool? setEnlistValue) : base(connectionOptions) {
   /* 略 */
   _dataSource                     = dataSource;
   /* 略 */
   // ★ココ
   ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, KEY.Data_Source);
}

引用返信 編集キー/
■91303 / inTopicNo.4)  Re[2]: タスクスケジューラからexe実行時に発生する現象
□投稿者/ PANG2 (302回)-(2019/06/13(Thu) 18:06:01)
serverが長すぎると現象出ますね。

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnString);
string dataSource = builder.DataSource; //この値をログ

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ