C#添加要运行的程序将不会添加完整路径

时间:2013-09-06 15:27:15

标签: c#

我添加到注册表运行的方式有些奇怪。

当我使用

 private static string AppPath = new Uri((System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath;

在运行注册表中设置路径它工作正常,但如果文件夹名称为“c#”,例如添加的密钥将在#之前被删除 应该是:

C:/desktop/c#/myprogram.exe 但它是

c:/ desktop / c

你们有什么问题可以帮忙?

3 个答案:

答案 0 :(得分:5)

我认为Uri转义符号存在问题。试试这个:

string AppPath = System.Reflection.Assembly.GetExecutingAssembly ().Location;

答案 1 :(得分:1)

我无法复制您所看到的内容。我想也许你错过了一些信息:

var uri = new Uri("c:/desktop/c#/myprogram.exe");
string raw = uri.ToString(); // "file:///c:/desktop/c%23/myprogram.exe"
string local = uri.LocalPath; // "c:\desktop\c#\myprogram.exe"

你确定那里有Codebase属性的内容吗?

答案 2 :(得分:0)

这是因为#字符在Uri中编码而变为%23

我不确定您为什么要使用Uri来获取可执行文件的位置。有更好的方法(如 nightsnaker 发布)。

但是,如果您必须使用Uri(无论出于何种原因),您可以通过以下操作获得完整路径:

        string s = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
        Uri u = new Uri(s);
        string local = u2.LocalPath+u2.Fragment.Replace('/','\\');