注册 登录
编程论坛 VFP论坛

压缩 程序编译后运行只需两个文件

丁春秋yxp 发布于 2025-10-18 12:52, 261 次点击
VFP搞的小程序,编译成exe后,一大堆运行库,一大堆表文件、报表文件、变量存储文件跟在后边,看着就烦。想了几天,借力deepseek的帮助,最终将其压缩成两个文件,一个是可执行文件、一个是数据文件。
将这两个文件放在一个文件夹下运行,就是个绿色软件。在数据量不是太大的情况下(总的不要超过一百兆),这方法利于维护,十分给力。原有程序改造时也只需改下主程序即可。

一、可执行文件。编译后的EXE文件和运行库使用虚拟文件打包工具(Enigma Virtual Box)打包,甚至将第一次运行时会自动产生的两个FOXUSER文件也打包在一起(这两个文件视情可打包到数据文件中)。
二、数据文件。不能编译到EXE中的、运行时要修改的文件,在主程序中加上以下代码打包成一个文件。程序运行时分离,退出时合并。这样磁盘上始终就两个文件。

例子:打包7个文件(6个表文件和1个变量存储文件)成一个数据文件“ty.data”。
*------ 调用
DO fileprocess WITH "SEPARATE"   && 程序开始 从文件“ty.data”分离文件
DO fileprocess WITH "MERGE"   && 程序结束 合并文件到“ty.data”,同时删除原文件

*------ 合并或分离运行时需要更改的数据文件
PROCEDURE fileprocess
    LPARAMETERS lcaction  && "SEPARATE" 分离文件 / "MERGE" 合并文件
    IF lcaction = "SEPARATE"  && 分离文件
        RESTORE FROM ty.DATA ADDITIVE
        FOR i = 1 TO ALEN(lafiles, 1)
            IF !FILE(lafiles[i, 1])
                STRTOFILE(lafiles[i, 2], lafiles[i, 1])
            ENDIF
        ENDFOR
        RELEASE lafiles
    ELSE  && 合并文件(合并后删除原文件)
        LOCAL ARRAY lafiles[7, 2]
        lafiles[1, 1] = "ty_fz.dbf"  && 初始化文件名
        lafiles[2, 1] = "ty_fz_bf.DBF"
        lafiles[3, 1] = "ty_fuxx.DBF"
        lafiles[4, 1] = "ty_zhdj.dbf"
        lafiles[5, 1] = "ty_glry.dbf"
        lafiles[6, 1] = "ty_cb.DBF"
        lafiles[7, 1] = "ty_sz.mem"
        FOR i = 1 TO 7  && 初始化内容为空
            lafiles[i, 2] = ""
        ENDFOR
        IF FILE("ty.data")  && 如果ty.data存在,恢复内容
            RESTORE FROM ty.DATA ADDITIVE
        ENDIF
        FOR i = 1 TO 7  && 更新存在的文件内容,跳过不存在的文件
            IF FILE(lafiles[i, 1])
                lafiles[i, 2] = FILETOSTR(lafiles[i, 1])
                DELETE FILE (lafiles[i, 1])  && 删除文件
            ENDIF
        ENDFOR
        SAVE TO ty.DATA ALL LIKE lafiles
    ENDIF
ENDPROC



[此贴子已经被作者于2025-10-18 13:09编辑过]

7 回复
#2
schtg2025-10-18 14:00
#3
sych2025-10-18 16:22
甚至将第一次运行时会自动产生的两个FOXUSER文件也打包在一起(这两个文件视情可打包到数据文件中)。
config.fpw 加一句
RESOURCE=OFF
#4
sam_jiang2025-10-18 22:33
这个方案倒是新奇
#5
丁春秋yxp2025-10-18 23:13
回复 3楼 sych
是的,又学了一招
#6
cssnet2025-10-21 14:47
我第一反应关心的是:会不会被360或微软安全中心误报病毒?毕竟以前UPX之类就经常报毒,简直不敢给VFP的exe加壳了。
#7
hsfisher2025-10-24 08:41
#8
aqyejun2025-10-27 16:39
1