我添加到注册表运行的方式有些奇怪。
当我使用
时 private static string AppPath = new Uri((System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath;
在运行注册表中设置路径它工作正常,但如果文件夹名称为“c#”,例如添加的密钥将在#之前被删除 应该是:
C:/desktop/c#/myprogram.exe 但它是
c:/ desktop / c
你们有什么问题可以帮忙?
答案 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('/','\\');