我遇到了一个我不明白的奇怪错误。我创建了一个C#控制台应用程序,旨在测试我的Web服务是否在我的网络外部工作。它只是尝试连接到web服务,将每个阶段输出到控制台并将其写入文本文件,以便他们可以将日志发送给我。
它在3台XP机器上完美运行(一台在我的网络中,一台在外面)。一台Vista机器(有一个清单文件),但在我的老板XP机器上(他是一个IT人员,所以知道他在做什么),它抛出了一个非常奇怪的错误。
C:\ TEMP \ testwe〜1.EXE NTVDM CPU遇到了非法指令
http://www.houseofhawkins.com/roger.jpg“>
我做了一些谷歌搜索,似乎他的NTVDM可能已经被误导,或者有病毒或什么的。似乎都不是这种情况。我看不出会发生什么导致这种方式失败。
使用System; 使用System.Collections.Generic; 使用System.Text; 使用System.IO;
命名空间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);
}
}
}
}
我很困惑为什么上面的代码可以/会这样做。这有点只是我想知道的,部分是,这可能发生在真正的客户机器上,或者只是我的老板机器被感染了什么。
谢谢
答案 0 :(得分:1)
如果您最终使用NTVDM,那将是非常错误的,因为这是用于XP的16位DOS仿真层。如果在重新复制EXE之后再次发生这种情况,我会调查安装在老板PC上的软件(.NET框架版本等)。
我也尝试在WinDbg中运行它来查看你最终的位置,一旦出现错误就得到一个调用堆栈,我打赌你会在堆栈上找到一个奇怪的模块(间谍软件等)。