Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件名传递到注册表项中的.exe_C#_Installation_Registry - Fatal编程技术网

C# 将文件名传递到注册表项中的.exe

C# 将文件名传递到注册表项中的.exe,c#,installation,registry,C#,Installation,Registry,我有一个小的安装程序,它将一些.exe和DLL安装到目标机器上,并在注册表中设置一个键,以便用户右键单击Excel文件时看到一个新的上下文菜单项。此命令键具有以下值: [TARGETDIR]myexecutable.exe%1 %1有效地将文件名传递给我在args[0]中的可执行文件。我希望这将为我的.exe提供完整路径。但它给了我某种压缩路径。例如: C:\Documents and Settings\user\Desktop\teestqqq.xls 它将给我: C:\DOCUME~1\us

我有一个小的安装程序,它将一些.exe和DLL安装到目标机器上,并在注册表中设置一个键,以便用户右键单击Excel文件时看到一个新的上下文菜单项。此命令键具有以下值:

[TARGETDIR]myexecutable.exe%1

%1有效地将文件名传递给我在args[0]中的可执行文件。我希望这将为我的.exe提供完整路径。但它给了我某种压缩路径。例如:

C:\Documents and Settings\user\Desktop\teestqqq.xls

它将给我:

C:\DOCUME~1\user\Desktop\TEEST~1.XLS

这对我来说是个问题。我怎样才能解决这个问题?我需要一个正确的完整路径

更新:根据评论和回答中的要求,这对我来说是一个问题,因为我从收到的路径中派生出一些新的文件夹名称。这些文件夹名称将被提交,以便SVN存储库稍后由一些用户提交。我注意到,在我用户的一些机器上,.exe接收排序路径,而在另一些机器上接收长路径。我的用户认为文件夹名称是“独特的”,以不同的目的在SvN上。我只需要一种方法来确保文件夹名称的唯一性(我认为在撰写本文时,下面的答案中已经有我需要的内容)

您可以尝试:

string shortName = @"C:\DOCUME~1\user\Desktop\TEEST~1.XLS";
string longName = System.IO.Path.GetFullPath(shortName);
早在“长文件名”之前。MS DOS中的文件名名称限制为8个字符,后跟一个点,扩展名最多3个字符。您看到的是带有长文件名的短版本路径。下面是一个较长的解释:

现在解释一下给定的路径对您来说是个什么问题?因为windows API也应该能够处理短文件名版本

正如ken2k提到的,
System.IO.Path.GetFullPath(..)
将返回给定短文件名路径的扩展路径

引用文件:

如果传入短文件名,它将扩展为长文件名

试一试


应该这样做。但是您应该能够使用短路径。

%1
替换为
%1
,也就是说,加上引号,您将得到长文件名。问题是“文档和设置”的名称中有空格,如果没有引号,就无法正确地传递给程序。这就是为什么shell将路径转换为不带空格的短名称,然后将其传递给您的程序。

这就是您得到的短路径。为什么这是个问题?
Path.GetFullPath(path)