为什么NSIS中没有删除临时文件?

时间:2013-04-01 16:16:03

标签: nsis

我在临时文件中比较了两个文件和存储的不匹配值。我已提到这个link。之后,从临时文件中读取值并替换为原始文件。最后我试图删除临时文件。除临时文件删除外,所有进程都正常工作。

我使用了以下代码:

page custom twofilecompare
page custom originalwrite
        Function twofilecompare
        FileOpen $0 "$INSTDIR\backup.properties" "r"
        FileOpen $1 "$INSTDIR\orginal.properties" "r"
        #IfFileExists "$INSTDIR\temp.properties" 0 +1 
        #Delete /REBOOTOK "$INSTDIR\temp.properties"
        FileOpen $R0 "$INSTDIR\temp.properties" "w"
        ClearErrors             

        loop:
            FileRead $0 $2
            ${If} $2 ==  "$\r$\n"
            Goto loop
            ${EndIf}
            FindClose $0


            FileRead $1 $3
            IfErrors done         
            strcmp $2 $3 loop here
            here: 
               FileWrite $R0 $2
               Goto loop

        done:
            FileClose $0                                    
            FileClose $1
            FileClose $R0
        FunctionEnd

       Function originalwrite
    IfFileExists "$INSTDIR\temp.properties" 0 filenotfound
    FileOpen $0 "$INSTDIR\temp.properties" "r"
    loop:
            FileRead $0 $1
            IfErrors done
            //do some stuff

    done:
        **IfFileExists "$INSTDIR\resource\temp.properties" 0 filenotfound
        Delete /REBOOTOK "$INSTDIR\temp.properties"**   
    filenotfound:
    MessageBox MB_OK "file not found"
    FunctionEnd

即使我也无法手动修改这三个文件[temp,backup,original]。如果我修改并点击显示为的保存提示信息,请检查此文件是否打开了另一个程序“ 我已经在文件使用完成后使用文件关闭。 即便我也试过这段代码

Function .onInstSuccess
IfFileExists "$INSTDIR\temp.properties" notfound
MessageBox MB_OK "file exists"
Delete /REBOOTOK $INSTDIR\temp.properties
Goto done
notfound:
MessageBox MB_OK "file not found"
Done:
MessageBox MB_OK "file deleted"
FunctionEnd 

但是不删除临时文件。如何删除临时的这个文件?

有人可以帮助我吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

原始写入功能缺少FileClose

答案 1 :(得分:1)

您是否在脚本中请求管理员权限?

RequestExecutionLevel admin

如果您尝试编辑需要管理员权限进行编辑的文件(例如C:\ Program Files中的文本文件),某些应用程序(如Notepad ++)将显示“请检查此文件是否打开了另一个程序”消息。