2012-03-10 96 views
0

我有一个C#应用程序,可以在我的开发机器上正常加载,但无法在Win2008机器上启动。C#应用程序不在不同的机器上运行

经过框架和他们匹配,净4.0

我马上怀疑这个问题是从我从读书果然特定文件的引用而产生,使用一些测试代码,我把范围缩小到一个单一的线。

public static string[] salesArray = (File.ReadAllLines("sales.txt").ToArray()); 

如果我注释掉上面的行,测试应用程序启动,如果我将它放入,它将失败。有任何想法吗?

我正在将Debug目录复制到其中的第二台机器(sales.txt)。

这是整个代码。该应用程序只是打开一个空白窗口。

namespace testServer 
{ 
    public partial class Form1 : Form 
    { 

     public static string[] salesArray = (File.ReadAllLines("sales.txt").ToArray()); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 
} 
+1

使用相对路径,当你没有做任何事情来设置当前目录(或者甚至理智 - 检查当前目录是你的想法)时,我觉得这是一个非常糟糕的主意。 – 2012-03-10 02:27:35

+0

我曾尝试将该文件设置为@“c:\ sales.txt”,并确保该文件位于该文件中。在一台机器上工作,另一台机器不工作。 – 2012-03-10 03:38:24

+0

我发现了这个问题,即使我在两台机器上都安装了NET 4.0,开发机器上也有旧版NET版本。我猜NET 4.0不是向后兼容的,因为只要我在第二台机器上安装NET 3.5,应用程序运行良好。 – 2012-03-10 04:45:22

回答

2

你应该使用一个更好的机制,找到该文件,并检查其存在(即:File.Exists)之前打开它。

这也可以让你在出现问题时向用户报告,比如文件不存在于你期望的位置。

1

围绕代码放置一个异常处理程序。您可以获取错误消息,并可以优雅地处理故障。

它应该处理所有错误(未找到文件,正在使用的文件,权限错误等)。

3

两个潜在的问题跳出来:

1)应用程序的当前工作目录是不是你想的是: 如果可以打印/显示这一点,你就会知道。 http://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory.aspx

由于您指定了一个相对路径,因此当前工作目录就是该文件正在解析的目标。

2)也许权限。您可以右键单击“以管理员身份运行”作为对该理论的快速检查。

+0

我试着改为:public static string [] salesArray =(File.ReadAllLines(@“c:\ sales.txt”)。ToArray());另外,尝试以管理员身份运行,问题依然存在。我添加了字符串路径= Directory.GetCurrentDirectory(); MessageBox.Show(path);到program.cs,它首先运行,并看到一个消息框与当前目录,但只要我点击确定,它碰撞ReadLine代码时崩溃。 – 2012-03-10 03:52:54

+0

就像史蒂夫说的那样,你应该用try/catch和MessageBox.Show(e)来包装那行。 – sethcall 2012-03-10 04:00:25

+0

我用try catch,这里是什么出现:“'testserver.Form1.cs'的类型初始值设定项抛出和异常。” – 2012-03-10 04:07:14

相关问题