質問
理解できないかなり奇妙なエラーが発生しました。私は、Webサービスがネットワークの外部から機能しているかどうかを確認するためのテストとしてのみ設計されたC#コンソールアプリケーションを作成しました。 Webサービスに接続して、各ステージをコンソールに出力し、テキストファイルに書き込んでログを送信できるようにしました。
3台のXPマシンで完全に機能しました(ネットワーク内に1台、外部に2台)。 Vistaマシン(マニフェストファイルがありました)が、上司のXPマシン(彼はIT担当者なので、自分が何をしているかを知っています)では、非常に奇妙なエラーがスローされました。
C:\ temp \ testwe〜1.exe NTVDM CPUが不正な命令を検出しました
http://www.houseofhawkins.com/roger.jpg <!> quot; <!> gt;
グーグルで調べたところ、彼のNTVDMが盗聴されているか、ウイルスなどがあったようです。これらのいずれも当てはまらないようです。これが失敗する原因は何なのかわかりません。
システムの使用。 System.Collections.Genericを使用します。 using System.Text; System.IOを使用して、
namespace testwebservice { クラスプログラム { FileStream theFile = null; StreamWriter writer = null;
static void Main(string[] args)
{
Program p = new Program();
p.testMe();
}
private void testMe()
{
Console.WriteLine("Entered main method about to create stream");
try
{
theFile = File.Create(@"jonTestWebService.log");
writer = new StreamWriter(theFile);
writer.AutoFlush = true;
try
{
message("Starting test at: " + DateTime.Now.ToLongTimeString());
Random rand = new Random();
message("creating new instance of webservice");
houseofhawkins.testweb webServ = new testwebservice.houseofhawkins.testweb();
message("calling hello world");
String helloResult = webServ.HelloWorld();
message("hello world result = " + helloResult);
int one = rand.Next(999);
int two = rand.Next(999);
message("calling maths method with " + one + " + " + two);
String mathResult = webServ.mytestMethod(one, two);
message("Math result is: " + mathResult);
message("Creating instance of CSJawbreaker");
CSJawbreaker.InformationService csj = new testwebservice.CSJawbreaker.InformationService();
message("trying to get the latest version number");
float version = csj.latestVersionNumber();
message("Version number: " + version.ToString());
message("");
message("Finished all processing at: " + DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
writer.WriteLine("");
writer.WriteLine(ex.Message);
writer.WriteLine("");
}
}
catch (Exception ex)
{
Console.WriteLine("could not create stream Writer, " + ex.Message);
}
message("");
message("Press return to exit");
Console.ReadLine();
writer.Close();
theFile.Close();
}
private void message(String message)
{
if (theFile != null && writer != null)
{
Console.WriteLine(message);
writer.WriteLine(message);
}
}
}
}
上記のコードがこれを行うことができる/行う理由を私は非常に立ち往生しています。それは私が知りたいと思っていることの一部であり、部分的には、これは実際のクライアントマシンに起こる可能性がありますか、単に上司のマシンが感染したか何かです。
ありがとう
解決
NTVDMで終わる場合、これはXPの16ビットDOSエミュレーションレイヤーであるため、何かが非常に間違っています。 EXEを再度コピーした後にこれが再び発生する場合は、上司のPCにインストールされているソフトウェア(.NETフレームワークバージョンなど)を調査します。
WinDbgでこれを実行して、最終的にどこで終わるかを確認し、フォールトが発生したらコールスタックを取得します。スタック上に奇妙なモジュール(スパイウェアなど)が見つかるはずです。