c# wpf代码怎么嵌入EXE应用程序?
作者&投稿:朝纯 (若有异议请与网页底部的电邮联系)
在 C# WPF 中嵌入 EXE 应用程序的方法有多种。一种方法是使用 Process 类并调用其 Start 方法来启动 EXE 应用程序,然后使用 WindowInteropHelper 类来将 EXE 应用程序窗口嵌入 WPF 窗口中。例如:
请注意,这只是一种可能的方法,并不一定适用于所有情况。如果您需要更详细的帮助,请提供更多信息,例如您的目标和限制。
如果您想在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 控件的大小来实现。通常来说,您可以通过绑定控件的大小到其他控件的大小来实现自适应。
希望以上回答能够帮到您。如果您还有其他疑问,欢迎提出。
对于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>
这样编译后就可以了。
好的,那么您想要在 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 程序启动为最大化窗口。
希望以上信息能够帮助您解决问题。
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 ;
宥菡曲腾: 已经有一个应用程序A,在B的程序中调用,可以理解为调用外部exe,这本质上就是两个程序,如果你要传参给A,可以调用电脑上的临时文件,在里面写值,两个窗体互相...
金乡县13253155867: c#如何在语句中调用一个EXE应用程序? - ?
宥菡曲腾: System.Diagnostics.Process.Start("notePad");notepad大小写无所谓,也可以不加.exe .如果不是系统关联的程序指明路径就行了.
金乡县13253155867: 如何在C#代码中调用exe执行文件 - ?
宥菡曲腾: using System.Diagnostics;Process.Start("nodepad.exe"); // 把nodepad.exe换成要调用的exe执行文件完成路径
金乡县13253155867: C#怎么把一编译好的程序做成一个.exe文件 - ?
宥菡曲腾: 1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图)2:安装向导 关闭后打开安装向导,点击下一步,或者直接点击完成. 如下图: 3:开始制作 安装...
金乡县13253155867: 怎样把C# 程序打包成exe可执行文件? - ?
宥菡曲腾: 你在编译器里面Build一下,然后去\bin\Debug目录下找.exe exe就是可执行文件了.运行的时候可能需要用到Debug目录下的其他文件(如配置文件、DLL等),所以需要把Debug下的所有文件都放到一起.
金乡县13253155867: C#高手求教..怎么调试代码,怎么将源代码形成EXE程序 我用的是VS2008 - ?
宥菡曲腾: 这个问题分成两部分解决:第一、调试代码,首先在在你要调试的代码段中插入断点,在制定代码行按F9或者右键断点,插入断点,然后又将解决方案配置设置成debug模式,然后单击绿色箭头启动调试或者调试启动调试运行项目,当程序执行到插入断点的代码段是就可以通过按F10和F11监视你想要看的参数了;第二、将代码生成EXE程序,在解决方案上右键生成解决方案就可以在bin文件夹下找到你的EXE程序了;希望对你有帮助,还是多买点书籍好好研究一下吧!这些可都是最基本的常识啊!
金乡县13253155867: C# 怎么把其他应用程序集成到当前项目 - ?
宥菡曲腾: 一般地,使用C#进行Windows编程比使用C++要容易得多,特别地当我们不能使用MFC库时.所以很多程序员喜欢使用C#环境建立他们的工程.但是有时候需要在C++环境下进行编程.例如:当你想在一个C++程序上开发一个附件软件时.我...
金乡县13253155867: C#的WinForm中嵌入.exe文件 - ?
宥菡曲腾: 这个函数setparent 函数原型:HWND SetParent(HWND hWndChild,HWND hWndNewParent); 参数: hWndChild:子窗口句柄. hWndNewParent:新的父窗口句柄.如果该参数是NULL,则桌面窗口就成为新的父窗口.在WindowsNT5.0中,如果参数为HWND_MESSAGE,则子窗口成为消息窗口. ------------------- 你在c#里面调用就是了,父窗口句柄设置为你的那个窗口,子窗口句柄就是你说的你那个EXE文件运行后的窗口的句柄.
金乡县13253155867: 咋用c#程序的代码执行exe文件呢????
宥菡曲腾: 需要调用系统接口. 只需要运行一次程序 就会自动生成一个exe文件是java的话 操作很复杂
金乡县13253155867: C#如何调用外部exe程序 - ?
宥菡曲腾: 在程序的开始using System.Diagnostics;然后在初始化函数的上方定义private static System.Diagnostics.Process p;2.在Button的双击事件中,添加如下代码: if (p == null){p = new System.Diagnostics.Process(); p.StartInfo.FileName = "应用程...