1

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

当我使用

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

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

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

c:/桌面/c

大家有什么问题可以帮忙吗?

4

3 回答 3

5

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

string AppPath = System.Reflection.Assembly.GetExecutingAssembly ().Location;
于 2013-09-06T15:35:16.013 回答
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 属性会产生什么吗?

于 2013-09-06T15:39:21.517 回答
0

发生这种情况是因为#字符被编码在Uriand中%23

我不确定您为什么要使用它Uri来获取可执行文件的位置。有一个更好的方法(如夜蛇贴)。

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

        string s = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
        Uri u = new Uri(s);
        string local = u2.LocalPath+u2.Fragment.Replace('/','\\');
于 2013-09-06T15:44:49.393 回答