我正在从“D:\ App \ program.cs”运行我的C#应用程序。我的应用程序需要执行一个放在“C:\ Program Files \ software \ abc.exe”中的文件。.NET中的相对路径
如何设置我的程序中执行“abc.exe”的相对路径?
我正在从“D:\ App \ program.cs”运行我的C#应用程序。我的应用程序需要执行一个放在“C:\ Program Files \ software \ abc.exe”中的文件。.NET中的相对路径
如何设置我的程序中执行“abc.exe”的相对路径?
一个批处理文件来回答这个问题是如何获取显示pathB从pathA相对位置的路径。您可以使用Uri类来获取相对路径。
string pathA = @"C:\App\program.cs";
string pathB = @"C:\program files\software\abc.exe";
System.Uri uriA = new Uri(pathA);
System.Uri uriB = new Uri(pathB);
Uri relativeUri = uriA.MakeRelativeUri(uriB);
string relativeToA = relativeUri.ToString();
Console.WriteLine(relativeToA);
这产生了相对路径 “../program%20files/software/abc.exe”。
我已经将您的示例从D更改为C,尽管上面的代码仍然有效,但是因为您不能在两个不同驱动器号的位置上有相对路径,所以只会产生绝对值。
,或者如果C#位是一个红色的鲱鱼,和我现在明白你想运行一个批处理文件:
在批处理文件中提出:然后
cd c:\program files\software\
abc.exe
abc.exe将执行软件文件夹而不是批处理文件的文件夹。
目前尚不清楚你所说的“设置相对路径”的意思,但如果你使用Process
和ProcessStartInfo
运行可执行文件,我会建议你使用绝对路径来指定可执行文件,并ProcessStartInfo.WorkingDirectory
告诉过程在哪里运行(以便在新过程中适当评估相对路径)。
编辑:如果你想在批处理文件来运行C:\ Program Files文件\ SOFTWARE \ abc.exe然后批处理文件的内容应该是刚:
"c:\Program Files\Software\abc.exe"
(注意引号允许空间)。
虽然我没有看到这与相对路径名有什么关系。
您不应该使用相对路径来引用程序文件中的某些内容。我建议使用Environment.GetFolderPath(和Environment.SpecialFolder)获取Program Files路径,然后使用一些配置设置获取程序的提示路径。
我不应该这样做或不能这样做?任何方式我的要求是使用相对路径来做到这一点。谢谢。 – Anuya 2010-09-07 05:45:02
@Anuya,你可以这样做,但不应该这样做,因为 - 例如“程序文件”可以存在于任何逻辑驱动器上。您可以使用特殊文件夹来获取程序的路径并在批处理文件中使用完整路径(假设批处理文件由代码生成)。不知道为什么坚持相对路径。 – VinayC 2010-09-07 05:49:39
所有机器都在c驱动器上有程序文件。它是系统安排的一部分。可能这就是为什么要求是这样的。所以在这种情况下,我认为在使用指向“c:\ program files \ software \ abc.exe”的相对路径时不会出现问题。现在我该怎么做?谢谢。 – Anuya 2010-09-07 06:01:28
我的应用程序将创建一个带有路径和可执行文件名的批处理文件。然后按照需求通过cmd执行批处理文件。在这种情况下,我需要为应用程序提供一个相对路径,以便在执行之前写入批处理文件。明白吗? – Anuya 2010-09-07 05:35:35
为了让我的问题更简单..我想通过双击“D:\ BatchFiles \ ExecAbc.bat”中的批处理文件在“c:\ program files \ software \ abc.exe”中执行.exe。在批处理文件里面执行abc.exe?谢谢。 – Anuya 2010-09-07 05:37:22
@Anuya:我编辑了我的答案。它的相对路径还没有完全清楚。也许你误解了这个术语? – 2010-09-07 05:59:05