C# 使用Process.Start和shortPath在一台计算机上运行,而在另一台计算机上不运行
我正在做一个小软件,从数据库中读取要打开的应用程序的名称,并自动打开它们 我在一台计算机上开发了它,创建了安装程序,并在几台计算机上安装了它。都有Windows 7和service pack 1。在所有的计算机上,它都在工作,只有一台除外 在此计算机上,我收到以下错误: 找不到“C:\Users\Pulse\MYDOCU~1\jdkjdjskjs.xlsx”。检查 检查文件名的拼写,并验证文件位置是否正确 对 如果您试图从最近使用的列表中打开文件 文件,请确保该文件未被重命名、移动或删除 路径创建正确,错误仅出现在文件名中。它为每次执行创建的字符不同(尽管文件名相同) 以下是我使用的代码:C# 使用Process.Start和shortPath在一台计算机上运行,而在另一台计算机上不运行,c#,file-io,C#,File Io,我正在做一个小软件,从数据库中读取要打开的应用程序的名称,并自动打开它们 我在一台计算机上开发了它,创建了安装程序,并在几台计算机上安装了它。都有Windows 7和service pack 1。在所有的计算机上,它都在工作,只有一台除外 在此计算机上,我收到以下错误: 找不到“C:\Users\Pulse\MYDOCU~1\jdkjdjskjs.xlsx”。检查 检查文件名的拼写,并验证文件位置是否正确 对 如果您试图从最近使用的列表中打开文件 文件,请确保该文件未被重命名、移动或删除 路径创
StringBuilder shortPath = new StringBuilder(255);
GetShortPathName(fileName, shortPath, shortPath.Capacity);
Process.Start(commandLine, shortPath.ToString());
我从数据库中读取的文件名和命令行数据。
这里需要更正什么?您提供的代码没有多大帮助,您需要为我们提供
GetShortPathName
的代码,以及“路径创建正确,错误仅出现在文件名中。它创建的字符对于每次运行都是不同的(尽管文件名相同)。”这是否意味着长名称每次都相同,但短名称不同?另外,文本是否真的是“jdkjdjskjs”,或者您是否替换了文件名,请给我们真实的名称,因为它会影响对它可能是什么的决定。为什么您需要使用短路径?@ScottChamberlain:是WinAPI。不过,你其余的评论都很到位。:-)有没有可能在那台机器上产生了短名称?@Damien_The_unsiver我可以看出两个原因,1。在作为参数传递给下一个程序2的路径中,不需要处理转义空格。(在这种情况下不适用)如果需要进行某种路径连接,则会减少在windows中超过最大文件路径长度的机会。另外,请将P/Invoke语句包含在GetShortPathName
中,以便我们检查是否有错误。最后,您能否在该文件的文件夹中执行一个dir/X
,并向我们显示该文件的长名称和短名称的输出?