C ++ / CLIプロジェクトを変更して、config.iniテキストファイルの解析方法を変更しました。ただし、以前と同じように、ディスク上のファイルにアクセスします。
StreamReader ^sr = gcnew StreamReader(CONFFILE_NAME);
String ^rdfl = sr->ReadToEnd();
sr->Close();
これで、VS2008Express環境の外部では実行されなくなります。これはサービスを装ったWinFormであり、通知トレイにとどまる必要がありますが、代わりに、マウスをその上に置くまでデフォルトのアイコンが点滅します。これは、すでに異常終了していることを示しています。デフォルトのアイコンはすぐに更新されるはずなので、その時点までもう一度確認します。クリーンアップと再構築を試しました。
ありがとう。
_編集_
構成ファイルが存在しないか、互換性がない場合は正常に実行されます。ウィンドウが表示され、正しい構成を入力すると、彼女は終了します。ただし、VS2008内からファイルから構成データを再ロードし、以前はなしから構成データを再ロードします(コーディングに大きな論理エラーがありますが)。
上記に投稿された直後のコードは次のとおりです。
int fore = 0;
int aft;
while (statsRead < 4) {
fore = rdfl->IndexOf(':', aft)+1;
if (fore == -1) break;
aft = rdfl->IndexOf('\n', fore);
if (aft == -1) break;
if (statsRead == 0) str1 = rdfl->Substring(fore, aft-fore)->Trim();
else if (statsRead == 1) str2 = rdfl->Substring(fore, aft-fore)->Trim();
else {
String ^tmpIntStr = rdfl->Substring(fore, aft-fore)->Trim();
int tmp_int;
if (Int32::TryParse(tmpIntStr, tmp_int)) {
switch (statsRead) {
case 2: int1 = tmp_int; break;
case 3: int2 = tmp_int; break;
}
} else break;
}
++statsRead;
}
}
その後、ウィンドウをトリガーする最初の統計を除いて、残りの統計には私の場合に機能するデフォルト値が与えられます。
_編集_
ハンスとStreamReaderのMSDN文学によって提唱されているように、上記をtry and catchブロックで更新しましたが、それでも失敗します。スタックトレース(ありがとう、ハンス)は、障害が私のwhile
ステートメントであることを示しています(いいえ、MS)
if (File::Exists(CONFFILE_NAME)) {
String ^rdfl;
try {
StreamReader ^sr = gcnew StreamReader(CONFFILE_NAME);
try{
rdfl = sr->ReadToEnd();
} finally {
if ( sr )
delete (IDisposable^)sr;
}
} catch (Exception ^ex) {
MessageBox::Show(ex->Message);
}
int fore = 0;
int aft;
while (statsRead < 4) {
fore = rdfl->IndexOf(':', aft)+1;
if (fore == -1) break;
aft = rdfl->IndexOf('\n', fore);
if (aft == -1) break;
if (statsRead == 0) str1 = rdfl->Substring(fore, aft-fore)->Trim();
else if (statsRead == 1) str2 = rdfl->Substring(fore, aft-fore)->Trim();
else {
String ^tmpIntStr = rdfl->Substring(fore, aft-fore)->Trim();
int tmp_int;
if (Int32::TryParse(tmpIntStr, tmp_int)) {
switch (statsRead) {
case 2: int1 = tmp_int; break;
case 3: int2 = tmp_int; break;
}
} else break;
}
++statsRead;
}
}