事情是这样的,我在winform里面添加了一个超链接,就是点击就可以进入设置好的网站的那种,但是我觉得代码写死在里面不太好,于是我想将网站地址用配置文件来存储,这样想换网站就不用改代码,而且打包之后,EXE文件也改不了,所以,用配置文件来改是个不错的方案。
于是,我就在网上四处寻找,不过,虽然找到了,但是,我这里只要一搬过来就报错,就这样,我被这个问题困扰了差不多一天,因为我也算是个新手。
本来是想用App.config、ini的,但是可能是因为我的方向没有弄对,一路上遇到了不少挫折,最后我这里还是使用的xml,果然,文件内容被读出来了,但是我紧接着遇到了一个问题,而这个问题就是Process.Start();方法报错,具体是这样的。
此时的我很疑惑,明明ParseXml();的返回值是String类型,为什么会出现异常?刚开始我以为是字符串没有读进来,然后我在控制台打印输出了一下,结果是有的,这就奇怪了,以我的理解,Start();只需要一个字符串就行,但是不知道为什么,我这样传进来就死活不行,因为是个新手,这方面经验不是很多,所以一时还真有点手足无措。(解释下:这里调用的Process.Start(ParseXml());是我已经写好的,只是在main里面调用)
没办法,我继续在网上找,试了许多人的方法,直到我找到了真正对我有用的,这是原链接,不过我当时找到的时候人已经麻了,不过我还是试了试,很快啊,程序终于正常了,在这里真是万分感谢这位原作者。方法很简单,只要手动设置下UseShellExecute属性为True就行了。
正常之后整个人都轻松了
不过,虽然问题解决了,但是我还是不太清楚为什么,在这里希望有大神刷到这里可以教下我,万分感谢
最后附上完整代码:
using System.Collections.Generic;
using System.Linq;
using System.Configuration;
using System.Collections.Specialized;
using System.Xml.Linq;
using System.Xml;
using System.Diagnostics;
namespace _001_开始
{
internal class Program
{
//将App.Config.xml加载进来
public static string ParseXml()
{
XmlDocument doc = new XmlDocument();
doc.Load("D:\\Program Files\\VSDev\\001-开始\\App.Config.xml");
XmlElement root = doc.DocumentElement;
XmlElement student = (XmlElement)root.SelectSingleNode("student");
string name = student["name"].InnerText;
//string sex = student["sex"].InnerText;
//string phone = student["phone"].InnerText;
return name;
//Console.WriteLine(name);
//Console.WriteLine(sex);
//Console.WriteLine(phone);
}
static void Main(string[] args)
{
//Program program = new Program();
//program.ParseXml();
Process.Start(new ProcessStartInfo { UseShellExecute = true, FileName = ParseXml() });
}
}
}