C# 组合控制台工具并打包到单个.NET dll中

C# 组合控制台工具并打包到单个.NET dll中,c#,.net,console,C#,.net,Console,是否有一种方法可以组合控制台工具并打包到托管的.net DLL中。然后,我将能够通过从DLL调用函数来调用每个控制台工具的函数 例(仅举例子) 很遗憾,我无法访问这些控制台工具的源代码。是, 您正在寻找从嵌入式资源运行的可执行文件 这将有所帮助。可能的解决方案是运行一个外部工具,如下所示: string windowsVersion = Utilities.GetWindowsVersion(); //... static class Utilities { // Just a sample

是否有一种方法可以组合控制台工具并打包到托管的.net DLL中。然后,我将能够通过从DLL调用函数来调用每个控制台工具的函数

例(仅举例子)

很遗憾,我无法访问这些控制台工具的源代码。

是, 您正在寻找从嵌入式资源运行的可执行文件


这将有所帮助。

可能的解决方案是运行一个外部工具,如下所示:

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();
        }
    }
}