c# wpf代码怎么嵌入EXE应用程序?

我自己做了一个exe程序,其他平台的,现在想嵌入到wpf程序上的一个控件上。网上也找过资源,能够实现嵌套,但是效果都差那么一点点。
我想要的效果是:
1.隐藏标题栏,不显示最大化最小化以及关闭
2.默认最大化显示,显示的最大像素就是这个容器的像素
3.最大化显示后能自适应控件,相当于这个控件多大,里面这个exe就是等比例进行缩放
ps:注意是wpf啊,别整成winform了,我winform知道怎么嵌入,最好有封装代码,可以追加150分

在 C# WPF 中嵌入 EXE 应用程序的方法有多种。一种方法是使用 Process 类并调用其 Start 方法来启动 EXE 应用程序,然后使用 WindowInteropHelper 类来将 EXE 应用程序窗口嵌入 WPF 窗口中。例如:

请注意,这只是一种可能的方法,并不一定适用于所有情况。如果您需要更详细的帮助,请提供更多信息,例如您的目标和限制。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-11
如果您想在C# WPF应用程序中嵌入EXE应用程序,可以使用System.Diagnostics.Process类来实现。
下面是一个示例代码,可以帮助您快速实现嵌入EXE应用程序的功能:
using System.Diagnostics;
// 定义路径变量
string exePath = "C:\\Path\\To\\Your\\Exe.exe";
// 创建Process实例
Process proc = new Process();
// 设置要启动的应用程序的路径
proc.StartInfo.FileName = exePath;
// 启动应用程序
proc.Start();
在上面的代码中,我们首先定义了要嵌入的EXE应用程序的路径,然后创建了一个Process实例,并设置它的FileName属性为EXE应用程序的路径,最后通过调用Process实例的Start方法来启动应用程序。
注意:如果要在WPF应用程序中嵌入EXE应用程序,请确保EXE应用程序支持命令行启动,否则无法正常运行。
符:
您好,在 WPF 中嵌入 exe 程序可以通过使用 WindowsFormsHost 控件实现。但是要注意的是,WindowsFormsHost 控件只能用于嵌入 WinForms 程序,而不能用于嵌入 exe 程序。
如果您想要隐藏标题栏、不显示最大化最小化和关闭按钮,可以通过设置 exe 程序的窗口样式来实现。如果您不确定如何设置,可以搜索相关资料或在程序中使用调试工具进行查看。
至于最大化显示并自适应控件大小,您可以在嵌入 exe 程序之后,通过设置 WindowsFormsHost 控件的大小来实现。通常来说,您可以通过绑定控件的大小到其他控件的大小来实现自适应。
希望以上回答能够帮到您。如果您还有其他疑问,欢迎提出。本回答被提问者采纳
第2个回答  2022-12-11
对于C#程序,要把DLL嵌入到EXE中去,最权威和最常见的方法就是使用ILMerge这个工具,这是个命令行工具,有很多参数,可以将DLL很完美的嵌入到EXE中去,如果嫌命令行麻烦,也有人开源开发了图形界面ILMergeGUI,这两个工具的下载和帮助地址如下:

ILMerge http://www.microsoft.com/en-us/download/details.aspx?id=17630
ILMerge-GUI http://ilmergegui.codeplex.com/
于是下载了这两个工具,却出现将DLL嵌入到EXE中错误的情况,在网上查了下原因,竟然是ILMerge不支持WPF程序,我勒了个去,微软,你让我说你什么好呢?
ILMerge可以将Winform程序的DLL完美地嵌入到EXE中去(这一点我亲自测试了下,很不,点赞),但对WPF却不支持,原因是WPF的DLL中含有资源无法解决,微软,你好意思说这个工具是你开发的吗?
Winform程序将DLL嵌入到EXE中(一)——使用命令行 ##
下载ILMerge或者同时下载ILMerge-GUI,使用图形界面和使用命令行是同一个道理,只是图形界面简单些,所以这里以命令行说明。
我是下载ILMerge安装后,把ILMerge.exe复制到C:Windows目录下去了,这样可以直接在命令行中使用而不用去设置环境变量,不管怎样,只要能够在命令行下使用这个工具就行。
ILMerge有很多参数,其中有几个比较重要:

/target:目标,有library和Winexe两种选择,当将多个DLL整合成一个DLL时可以使用library,当要整合为EXE时,应该使用Winexe.
/out:输出,最终生成文件的路径和名称.
/log:输入,如果输入是EXE时可以不使用此参数直接写,而如果输入时DLL时,最好使用此参数
还有其它一些参数,使用时可以百度或者google一下,这是我测试的一张图片:

Winform程序将DLL嵌入到EXE中(二)——使用ILMerge.MSBuild.Tasks
ILMerge也使用Nuget发布了工具,使用Nuget的好处想必大家都知道,所以推荐使用这种方法。
第一步, 使用Nuget图形或Nuget命令下载ILMerge.MSBuild.Tasks

PM> Install-Package ILMerge.MSBuild.Tasks
第二步, 把VS项目文件记事本或者其它文本编辑工具打开,我使用的是Sublime Text 3,并按照如下格式根据实际情况修改:

<!-- Code to merge the assemblies into one:setup.exe -->
<UsingTask TaskName="ILMerge.MSBuild.Tasks.ILMerge" AssemblyFile="$(SolutionDir)packagesILMerge.MSBuild.Tasks.1.0.0.3 oolsILMerge.MSBuild.Tasks.dll" />
<Target Name="AfterBuild">
<ItemGroup>
<MergeAsm Include="$(OutputPath)$(TargetFileName)" />
<MergeAsm Include="$(OutputPath)LIB1_To_MERGE.dll" /> <!-- 这儿改成需要做嵌入的dll名 -->
<MergeAsm Include="$(OutputPath)LIB2_To_MERGE.dll" />
</ItemGroup>
<PropertyGroup>
<MergedAssembly>$(ProjectDir)$(OutDir)MERGED_ASSEMBLY_NAME.exe</MergedAssembly><!-- 这儿改成需要做输出的exe名 -->
</PropertyGroup>
<Message Text="ILMerge @(MergeAsm) -> $(MergedAssembly)" Importance="high" />
<ILMerge InputAssemblies="@(MergeAsm)" OutputFile="$(MergedAssembly)" TargetKind="SameAsPrimaryAssembly" />
</Target>
这样编译后就可以了。
第3个回答  2022-12-11
好的,那么您想要在 WPF 程序中嵌入一个预先存在的 EXE 程序,并实现上述的三个目标。
在 WPF 中嵌入一个预先存在的 EXE 程序,可以使用 WindowsFormsHost 控件。您可以将该控件放置在您的 WPF 窗体上,然后使用 System.Diagnostics.Process 类的 Start 方法启动预先存在的 EXE 程序。您可以通过设置该控件的 Child 属性来将启动的 EXE 程序显示在该控件上。
对于您的第二个目标,您可以通过设置 WindowsFormsHost 控件的 Size 属性来控制显示的 EXE 程序的大小。您可以设置该控件的 Size 属性为您希望 EXE 程序显示的最大像素。
对于您的第三个目标,您可以在启动 EXE 程序时将其最大化。您可以使用 System.Diagnostics.ProcessStartInfo 类的 WindowStyle 属性来控制启动的 EXE 程序的窗口样式。将其设置为 ProcessWindowStyle.Maximized 即可将 EXE 程序启动为最大化窗口。
希望以上信息能够帮助您解决问题。
第4个回答  2022-12-11
using System.Diagnostics; //需要添加这行引用,关于线程的
private void button1_Click(object sender, EventArgs e)
{
string path = @"C:\Program Files\Tencent\QQ\QQ.exe";//这个path就是你要调用的exe程序的绝对路径
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "qq.exe";
process.StartInfo.WorkingDirectory = path;
process.StartInfo.CreateNoWindow =true ;