所以我成功地使用以下代码在我的项目中使用各种参数运行命令行应用程序:
String f = fileName;
Process process = new System.Diagnostics.Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.FileName = "C:\\projects\\something\\MediaInfo.exe";
process.StartInfo.Arguments = " \"--Inform=Video;%Duration%|%Width%|%Height%;\" \"" + f + "\"";
process.Start();
StreamReader output = process.StandardOutput;
process.WaitForExit();
MessageBox.Show(output.ReadToEnd());
现在,不是我为MediaInfo.exe指定的绝对路径,而是我想指定一个相对路径,这样当我将我的应用程序发送给某人时,他们不需要将它放在正确的位置。地点。
在Visual Studio中,我选择我的项目并单击“添加现有”。我添加了我的文件。然后选择“始终复制”。我为“构建行动”尝试过各种各样的项目。我有一种感觉“无”是正确的选择。
无论如何,我的目标是让process.StartInfo.FileName
成为相对路径。我不知道该怎么做。有什么想法吗?
答案 0 :(得分:3)
您的应用程序的根目录可以通过...
获得string appRoot = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
此语句需要System.IO和System.Diagnostics才能编译。
您可以附加到此值以通过...来到您的应用程序根目录中的子目录,例如" data"
string dataPath = Path.Combine(appRoot, "data");
应用程序需要完全信任才能运行...
答案 1 :(得分:0)
将“C:\ projects \ something \ MediaInfo.exe”更改为“MediaInfo.exe”,以便您的应用尝试在同一目录中找到它。确保使用“MediaInfo.exe”释放您的应用程序,这就是全部。
“始终复制”内容仅将“MediaInfo.exe”复制到输出目录,如果您对文件路径进行硬编码,则无效。