不是小灵通 发表于 2015-6-10 14:59:37

为什么我编译的EXE文件运行时会产生一个EXET文件?[已大致解决]

本帖最后由 不是小灵通 于 2015-6-12 09:59 编辑


如图
我用AU3,v3.3.9.0 (beta)编写的程序,用其“工具”--“编译脚本”编译出来的EXE文件,在运行的时候会产生一个EXET文件?
而且,好像有的文件在每次运行后,EXE文件的MD5也相应发生了变化,文件修改时间好像也变为当前的了
还有没有可推荐的编译工具,能让EXE文件稳定点?

估计是不是因为生成的时候360没关,或其他暂时未知情况,而影响了exe文件结构造成不稳定。从字面意义上猜测理解为EXE的temp文件
算法和命令基本没变,但结果不同,不可预计

本案例的详细程序在6楼,经编译没发现上述情况。
网上百度exet文件,大部分均以病毒解释,无进一步描述

——鉴于此情况不能预期发生,表示不再深究了,以后发现根源再行理论。
本帖暂时结贴。

                            楼主启

ila 发表于 2015-6-10 18:26:08

一个字:上代码

bhffhzh 发表于 2015-6-10 21:04:27

这倒没碰到过。

ap112 发表于 2015-6-11 09:15:45

从来没遇到过

h20040606 发表于 2015-6-11 10:45:20

没有代码无法判断

不是小灵通 发表于 2015-6-11 13:29:40

本帖最后由 不是小灵通 于 2015-6-11 13:37 编辑

奇了怪了又不生成exet文件了,程序基本没什么改变。我已经发现好多次了。。。
【软件说明】
计算机实验室内,学生上课后大摇大摆的就走了,然后计算机也不关,或者关掉显示器以为电脑就关了。。。汗!
所以弄了个定时关机的程序
程序每到00,10...50分的时候,会自动从FTP里面下载(覆盖本地)一个配置文件(TIME.INI),读取里面设置好的时间点。下课时间配置文件可我们随时进行修改,并在下一个10分钟到来时更新至本地机,这样方便管理。
说明:以下提示的精度在正负1分钟
>>当到达下课前5分钟,会提示交作业
>>下课时间点,提示下课了,带走垃圾
>>下课后5分钟,提示将自动关机,并可以选择取消,继续使用
===》热键F10:可显示当前已读取的时间点
===》热键F11:测试版输入密码1可以退出本程序

文件打包下载:


代码如下:#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_Icon=G:\au3\energysaving(1).ico
#PRE_Outfile=Green(x86).exe
#PRE_Outfile_x64=Green(x64).exe
#PRE_Compile_Both=y
#PRE_UseX64=y
#PRE_Res_Comment=计算机实验室定时关机程序
#PRE_Res_Description=计算机实验室定时关机程序
#PRE_Res_Fileversion=2.0.0.0
#PRE_Res_LegalCopyright=Copyright 2015 by Computer Lab
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
;计算机实验室定时关机程序V2.0
;2015.4.28
;注意执行文件名为:Green.exe
;V2.0.0.0从FTP中读取TIME.INI配置文件至本地机,产生动作

;读取txt指定时间点
#include <Date.au3>
#include <Timers.au3>
#include <FTPEx.au3>
#include <Array.au3>

Opt("TrayMenuMode", 3) ; 默认菜单项目 (脚本暂停中/退出)(Script Paused/Exit) 将不会显示,并且所选项目不能被选中(checkbox不会打勾) . 请参考TrayMenuMode选项1和2(3=1+2).

;声明全局、局部变量
Global $Time;$T记录读取进来的时间段,共可容纳(0-9)10个,
Global $Timeticks;=;$Time换算成-5,0,+5分钟的时间码,如:
Global $l;didi频率参数
Global $pwd ="1";默认退出密码
Global $Ver="(V2.0.0.0 中文版2015.05.28)";当前版本号

Global $IPAddress="192.168.180.8"
Global $FTP_Port=21;FTP端口号
Global $FTP_User="work"
Global $FTP_PW=""

HotKeySet("{F11}", "Endend");F11,程序退出热键
HotKeySet("{F10}", "TimeINI");F10,显示已获取的时间点

MsgBox(0,"人性化节约用电软件"&$Ver,"现在时刻:" & @HOUR &":"& @MIN & @CRLF & @CRLF &"计算机实验室欢迎大家前来学习,我们将与全校师生共创节约型校园!" & @CRLF & @CRLF & "       >> Copyright 2015 by Computer Lab <<",10)

;~ FileDelete ( "TIME.INI" );删除本地已存在的旧INI文件【——测试版此语句不需工作】

;建议大循环由此开始,以便中途通过推送TIME.INI完成时间点重置
While 1
       
        ;【注意:测试版不需从服务器获取INI文件,注意同文件夹需有TIME.INI文件存在。实际运行版,下面5句生效,10分钟获取一次最新的INI配置】
;~         ;每当10分的时候(即00,10,20...50分钟时),获取一次INI文件
;~         Local $m=@MIN/10
;~         If $m=Int(@MIN/10) Then
;~                 getini()
;~         EndIf
       
       
        ;读取INI设定时间至数组
        Global $i=0,$j=0;循环变量,最多可以读取10行(10个时间点,0-9)
        Global $k=-1;判断time.ini有多少行有效数据       
       
        ;将ini内设时间点读入数组:$time
        For $i=0 To 9
                $j="TIME_" & ($i+1)
                $Time[$i]=IniRead("TIME.INI",$j,"Time","");读TIME.INI文件的指定关键字的值(time=值)

                ;对于有效数据,进行筛选、转换并放入数组
                If $Time[$i]<>"" Then ;判断条件暂定为:非空值
                        $k=$k+1
                        ;将TIME.INI文件中指定的有效时间,转换为时间戳,然后分别写入二维数组存放(带-5,0,+5分钟,[即参数修正为-3,0,+3]提醒,精确度±1分钟)
                        ;本版本设计最多支持10个时间点.
                        Timeticks($k)
                EndIf
        Next

        $i=0

        ; 获取当前系统时间,并转换为时间码
        Local $NowTicks = Round(_TimeToTicks(@HOUR, @MIN, @SEC)/100000,0)

        ;将系统当前时间与制定时间点进行比较,并分别作出不同动作
        For $i = 0 To $k

                Switch $NowTicks
                        ;距下课5分钟提醒
                        Case $NowTicks=$Timeticks[$i]
                                didi(3)
                                MsgBox(4096, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "还有几分钟就要下课了,请尽快完成并提交作业" & @CRLF & @CRLF &"无需惊慌,人性化的程序不会关闭正在使用的电脑^_^",30)
                                Sleep(50000);延迟50秒
                        ;下课提醒
                        Case $NowTicks=$Timeticks[$i]
                                didi(5)
                                MsgBox(4096, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "即将下课,请清理好自己的随身物品,带走垃圾,谢谢合作!",30)       
                                Sleep(50000);延迟50秒
                        ;下课后5分钟关机提醒
                        Case $NowTicks=$Timeticks[$i]
                                didi(8)
                                If MsgBox(262145, "计算机实验室提示信息", "现在时刻:" & @HOUR & "点" & @MIN & "分" & @CRLF & @CRLF & "响应“创建节约型校园”号召,本电脑将于2分钟后自动关闭..." & @CRLF & "此时点击“取消”可继续使用...", 60) =2 Then
                                        MsgBox(262144, "取消关机", "本次关机操作已成功取消!",15)
                                Else
                                        If MsgBox(262145, "关机前确认", "真的要关机吗?若本机依然无人干预,将于60秒后自动关闭..."& @CRLF & @CRLF &"此时点击“取消”仍可继续使用...", 60) =2 Then
                                                MsgBox(262144, "取消关机", "本次关机操作已成功取消!",15)
                                        Else
                                                MsgBox(262144, "已确定关闭该电脑", "电脑将于10秒后被关闭,谢谢使用!",10)
                                                Shutdown(13)
                                        EndIf
                                EndIf
                                Sleep(50000);延迟50秒
                EndSwitch
        Next
       
WEnd

;热键F11,输入密码退出
Func Endend()
        Local $passwd = InputBox("程序退出", "请10秒内输入退出密码,测试版密码为:1", "", "*",400,120,default,default,10)
        If $passwd=$pwd Then
                ;结束程序
                MsgBox(4096, "程序退出", "定时关机程序" & $Ver & "将于3秒后结束...",3)
                Exit
        EndIf
EndFunc

Func getini()
        ; 尝试从FTP(work)获取time.ini复制至本地【测试版不会被调用运行】
        Do
                $FTP_Open = _FTP_Open("MY_FTP");创建一个FTP会话
                $FTP_Connect =_FTP_Connect($FTP_Open,$IPAddress, $FTP_User, $FTP_PW,$FTP_Port)
                Local $File_found=_FTP_FileGet($FTP_Connect, "TIME.INI", "TIME.INI");默认false,覆盖(刷新)时间点INI文件
                _FTP_Close($FTP_Open)
                Local $file = FileExists ("TIME.INI");检测文件存在否
                Sleep(30000);延迟30秒再次尝试打开文件
        Until $file =1;直到文件被读取到,否则在此循环
EndFunc

Func Timeticks($k)
        $Timeticks[$k]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)-3;将读取的行数据,取左2、右2字节,并将其换算成为时间码[-5,0,+5分钟],下同
        $Timeticks[$k]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)
        $Timeticks[$k]=Round(_TimeToTicks(StringLeft($Time[$i],2),StringRight($Time[$i],2),0)/100000,0)+3
EndFunc
       
Func didi($l)
        Beep(100*$l, 500)
        Beep(0,10)
        Beep(100*$l, 200)
        Beep(0,10)
EndFunc

;热键F10,列表显示当前读取的时间点
Func TimeINI()
        _ArrayDisplay($Time,"下课时间点如下:")
EndFunc

不是小灵通 发表于 2015-6-11 13:32:38

回复 2# ila


    两个字:在6楼

不是小灵通 发表于 2015-6-11 13:33:25

回复 3# bhffhzh


    奇怪了今天重新编译又不出现此现象了,程序源码详见6楼

不是小灵通 发表于 2015-6-11 13:33:58

回复 5# h20040606


    今天又不出现了。。。代码在6楼

不是小灵通 发表于 2015-6-11 13:34:24

回复 3# bhffhzh


    我遇过几次了,还不止这一个程序

bhffhzh 发表于 2015-6-11 13:53:00

刚才试了你的代码,我这里没出现你说的现象

bhffhzh 发表于 2015-6-11 13:55:52

计算机实验室内,学生上课后大摇大摆的就走了,然后计算机也不关,或者关掉显示器以为电脑就关了。。。汗!



不是有专门的管理软件嘛,哪需要他们关。服务端一点,全关机了。

不是小灵通 发表于 2015-6-12 09:07:50

回复 12# bhffhzh


    是有,而且我还装了深蓝软件,但是机房太大了,120+吧,一层楼400多机器,目前只2个老师负责管理,有时候一个班还没走,另一个班的人就已经进来了

以前还弄了个15分钟不动鼠标键盘就关机的程序,结果证明在上课的时候,老师用屏幕广播讲课,学生的键鼠也不动,也会关机动作。不过当时是测试版,只出现msgbox而不正真关机

不是小灵通 发表于 2015-6-12 09:12:39

回复 11# bhffhzh


    是的,我昨天试的时候也不出现了,也基本没改什么算法和使用什么特殊的命令,但此前出现过多次,而且在两个家里和办公室都遇到过,奇了怪了。不知道会不会是编译工具不稳定

ila 发表于 2015-6-12 11:46:21

怀疑是编外的问题如病毒,
代码复制到干净的机器上运行试试了。
页: [1] 2
查看完整版本: 为什么我编译的EXE文件运行时会产生一个EXET文件?[已大致解决]