繁体   English   中英

我可以将 windows (.bat ) 文件放在 Visual Studio C# 项目的资源文件夹中吗?

[英]Can I put a windows (.bat ) file inside the resources folder of a Visual studio C# project?

虽然可以从 c: 位置运行批处理文件,但我想知道是否可以在资源文件夹中包含 .bat 文件。

我试过这个

Process p = new Process;
p.StartInfo.FileName = @"\Resources\batchfile.bat";

和这个

p.StartInfo.FileName = @"\Resources\batchfile";

两者都不起作用。

您可以将批处理文件放在您想要的任何文件系统位置。

不过,看起来批处理文件的路径是错误的。 带有前导反斜杠的路径相对于当前驱动器的根目录进行解释。 不过,这可能不是您的批处理文件所在的位置。 它可能位于应用程序自己的安装文件夹的 Resources 子目录中。 至少,从这些字符串中删除前导反斜杠。 然后它们将相对于您的进程的当前工作目录进行解释。

不过,最好使用完全限定的路径。 当前工作目录往往会在您意料之外的情况下发生变化。

您可能希望将 .bat 文件作为嵌入式资源包含在内。 因此,在 Visual Studio 中,您将打开文件的属性,并为“构建操作”打开 select“嵌入式资源”。

现在是有趣的部分......在您的应用程序中,您需要在使用程序集 object 上的GetManifestResourceStream方法执行之前提取文件并将其写入磁盘。 这有点棘手,因为您需要将资源名称传递给方法,并且该名称最终基于您的程序集命名空间以及路径(因此,如果您的项目是MyProject并且您的文件位于Resources\MyBat.bat中,那么资源名称将是MyProject.Resources.MyBat.bat ...至少我认为这是正确的)

实际上存在一个关于如何在此处执行此操作的 SO 问题,并且有一个比我要编写的代码示例更好的代码示例。 :)

string location;

Process p = new Process;

location = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
+@"\Resources\batchfile.bat";

p.StartInfo.FileName = location;

资源(您的 C# 项目)通常是在编译时链接到您的程序集的文件。 如果您将批处理文件放在那里,则必须在运行时将其解压缩到 %TEMP% 文件夹之类的文件夹中,然后从那里运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM