阿杰 发表于 2007-3-11 13:54:57

从程序中生成exe文件

<p>从程序中生成exe文件<br/>  这篇文章要讨论的是在一个VB程序中如何产生出另一个Exe文件。<br/>  要实现这个目的,必须符合以下几个条件:<br/>    第一、编写这样的程序时,具备欲生成的Exe文件<br/>    第二、事先知道欲生成的Exe文件大小<br/>  其实这两个条件可以说不是条件,但确实很重要。<br/>  为了叙说方便,将发行的程序称作APP-1.Exe,要生成的文件叫APP-2.Exe,以下是具体步骤:</p><p>    第一步,准备好APP-2.Exe,这里我使用VB写了一个什么都不做程序,编译成APP-2.Exe。<br/>    第二步,右键单击单击APP-2.Exe,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少k。<br/>    这样就具备了前边说的两个条件。<br/>    第三步,新建工程APP1,新建资源文件加入工程,在资源文件编辑器中添加自定义资源(CUSTOM),资源号使用默认的101。值得注意的是,每个资源号对应的资源项对资源大小的要求是有限制的,我记得时64K,因此如果APP-2.Exe的大小如果大于这个数的话,就要麻烦一些。如果是这样,我们的写另一个程序,把APP-2.Exe一个字节一个字节的读出来,每64K生成一个文件,然后再把这些文件分别写道资源文件的101、102......资源项中,代码也要作相应的修改。</p><p>    第四步,为APP-1.Exe编写代码,使其读取资源文件的数据,生成APP-1.Exe。</p><p>  代码如下:</p><p>  Private Const FILESIZEOFAPP2 = 20480 '我生成的APP-2.Exe大小是20480Byte<br/>  Private Sub cmdOK_Click() '单击按钮cmdOK运行代码<br/>    Dim APP2() As Byte 'APP2是个Btye类型和数组<br/>    Dim Counter As Long<br/>    APP2 = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组<br/>    '注意,微软的帮助中对加载定义资源的说明有误,硬是资源标识为"CUSTOM"而非数字<br/>    If Dir(App.Path &amp; "\APP-2.Exe") &lt;&gt; "" Then '第一次按cmdOK有效<br/>      MsgBox App.Path &amp; "\APP-2.Exe 已经存在!" <br/>      Exit Sub <br/>    End If<br/>    Open App.Path &amp; "\APP-2.exe" For Binary As #1 '以二进制方式写(生成)APP-2.Exe到APP-1.Exe所在的目录<br/>      For Counter = 0 To FILESIZEOFAPP2 - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终 <br/>        Put #1, , APP2(Counter)<br/>      Next Counter <br/>    Close #1<br/>    Shell App.Path &amp; "\APP-2.Exe", VBNormalFocus '运行刚生成的APP-2.Exe<br/>    Unload Me<br/>  End Sub</p>

dabian001 发表于 2007-3-11 20:21:01

怎么给生成出来的exe文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 带有主程序赋给他的参数???

阿杰 发表于 2007-3-12 07:54:35

command

马大哈 发表于 2007-3-14 18:48:30

<p>以下是引用dabian001在2007-3-11 20:21:01的发言:怎么给生成出来的exe文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 带有主程序赋给他的参数???</p><p>你试着写在EXE尾部,然后EXE运行后就读取这参数,并运行.</p>

马大哈 发表于 2008-5-20 13:13:48

<p>参考:</p>
<p>&nbsp;</p>
<p><font face="Verdana"><a href="http://www.m5home.com/blog2/blogview.asp?logID=445&amp;cateID=2">http://www.m5home.com/blog2/blogview.asp?logID=445&amp;cateID=2</a></font></p>

开心海 发表于 2008-6-5 20:46:40

<p>不用管要生成的文件的大小,直接这样就可以:</p>
<p>&nbsp;</p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; Dim TempFile() As Byte<br/>&nbsp;&nbsp;&nbsp; Dim FileNum As Integer<br/></font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; If Dir("d:\test.exe") = "" Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TempFile = LoadResData(101, "CUSTOM")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileNum = FreeFile<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Open&nbsp;"d:\test.exe" For Binary Access Write As #FileNum<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Put #FileNum, , TempFile<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Close #FileNum<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/></font></p>
页: [1]
查看完整版本: 从程序中生成exe文件