C# 组合控制台工具并打包到单个.NET dll中
是否有一种方法可以组合控制台工具并打包到托管的.net DLL中。然后,我将能够通过从DLL调用函数来调用每个控制台工具的函数 例(仅举例子) 很遗憾,我无法访问这些控制台工具的源代码。是, 您正在寻找从嵌入式资源运行的可执行文件C# 组合控制台工具并打包到单个.NET dll中,c#,.net,console,C#,.net,Console,是否有一种方法可以组合控制台工具并打包到托管的.net DLL中。然后,我将能够通过从DLL调用函数来调用每个控制台工具的函数 例(仅举例子) 很遗憾,我无法访问这些控制台工具的源代码。是, 您正在寻找从嵌入式资源运行的可执行文件 这将有所帮助。可能的解决方案是运行一个外部工具,如下所示: string windowsVersion = Utilities.GetWindowsVersion(); //... static class Utilities { // Just a sample
这将有所帮助。可能的解决方案是运行一个外部工具,如下所示:
string windowsVersion = Utilities.GetWindowsVersion();
//...
static class Utilities { // Just a sample of cmd.exe invocation
public static string GetWindowsVersion() {
using(Process versionTool = new Process()) {
versionTool.StartInfo.FileName = "cmd.exe";
versionTool.StartInfo.Arguments = "/c ver";
versionTool.StartInfo.UseShellExecute = false;
versionTool.StartInfo.RedirectStandardOutput = true;
versionTool.Start();
string output = versionTool.StandardOutput.ReadToEnd();
versionTool.WaitForExit();
return output.Trim();
}
}
}
您可以将这些可执行文件嵌入到程序中(作为资源),在运行时将这些工具提取到特定位置,然后按照上面指定的方式运行这些工具
还请查看以下线程:不,您不能将独立的可执行文件放在DLL中,然后在那里调用它们。为什么不能自己编写等价的函数并将它们放在实用程序类中?您提供的两个示例似乎没有任何复杂之处。谢谢@ken white,没有复杂之处,因为它们只是示例。我实际上是在处理复杂的控制台实用程序。我记得我也看到了不保存exe文件的解决方案,但您必须查找它。这个答案不是“运行嵌入式可执行文件”。它将其提取为资源,保存到文件中,从磁盘运行文件,然后删除提取的文件。所有这些都不是问题所在。您的答案不是“运行嵌入式可执行文件”。它从磁盘中提取并运行它。您链接到的答案也不会运行它。它将其提取为资源,保存到文件中,从磁盘运行文件,然后删除提取的文件。(请参阅链接答案中的最后三行代码。)您的或链接的都没有回答她提出的问题。@KenWhite问题不是关于“运行嵌入式可执行文件”,而是关于将一些工具组合到一个库中,并以某种方式使用该库。我相信,如果结果是可以接受的,那么OP如何做并不重要。我的回答只是指出了如何实现的方向……问题是关于“将控制台可执行文件嵌入到DLKL中,然后将其作为函数调用到DLL中”,这显然不是“从DLL中提取应用程序并运行它”。
Utilities.Trim("input.txt","ouptut.txt");
Utilities.Copy("input.txt","ouptut.txt");
string windowsVersion = Utilities.GetWindowsVersion();
//...
static class Utilities { // Just a sample of cmd.exe invocation
public static string GetWindowsVersion() {
using(Process versionTool = new Process()) {
versionTool.StartInfo.FileName = "cmd.exe";
versionTool.StartInfo.Arguments = "/c ver";
versionTool.StartInfo.UseShellExecute = false;
versionTool.StartInfo.RedirectStandardOutput = true;
versionTool.Start();
string output = versionTool.StandardOutput.ReadToEnd();
versionTool.WaitForExit();
return output.Trim();
}
}
}