Installation Inno设置-文件正在使用,不允许跳过/取消

Installation Inno设置-文件正在使用,不允许跳过/取消,installation,inno-setup,Installation,Inno Setup,我已经根据需要配置了“Inno设置”,但有一点我无法修改 我们有一个应用程序,安装在客户服务器的网络文件夹中。基本上,更新文件的工作与预期的一样 如果网络上的某个客户端(未启动更新的用户)打开了应用程序,我将收到一条消息框/errorbox“删除文件失败…文件正被另一个进程使用”-包括3个按钮“重试”、“跳过此文件(不推荐)”、“取消安装”。我附上了一张示例图片(可在互联网上找到,但信息相同) 在那里你可以看到3个按钮。我想禁用“跳过此文件”和“取消安装”。用户应该能够点击“重试”-在所有客户

我已经根据需要配置了“Inno设置”,但有一点我无法修改

我们有一个应用程序,安装在客户服务器的网络文件夹中。基本上,更新文件的工作与预期的一样

如果网络上的某个客户端(未启动更新的用户)打开了应用程序,我将收到一条消息框/errorbox“删除文件失败…文件正被另一个进程使用”-包括3个按钮“重试”、“跳过此文件(不推荐)”、“取消安装”。我附上了一张示例图片(可在互联网上找到,但信息相同)


在那里你可以看到3个按钮。我想禁用“跳过此文件”和“取消安装”。用户应该能够点击“重试”-在所有客户端关闭其应用程序之前,他们应该一直处于停滞状态。

我认为您无法更改该消息框

有两种选择:

  • 在安装新版本之前,您可以使用自己的代码删除目标文件,在文件消失之前不允许继续

    [文件]
    Source:“Source:“C:\SampleApplicationData\*”DestDir:“{app}\SampleApp”\
    标志:recursesubdirs createallsubdirs;安装前:ForcedDelete
    [守则]
    程序强制删除;
    变量
    文件名:字符串;
    删除:布尔值;
    开始
    文件名:=ExpandConstant(当前文件名);
    重复
    如果文件不存在(文件名),则
    开始
    日志(格式('文件%s不存在',[文件名]);
    已删除:=真;
    结束
    其他的
    如果删除文件(文件名),则
    开始
    日志(格式('文件%s已删除',[文件名]);
    已删除:=真;
    结束
    其他的
    开始
    MsgBox(格式('Error deleting%s',[FileName]),mbError,MB_OK);
    删除:=假;
    结束;
    直至删除为止;
    结束;
    
    尽管我仍然相信代码至少应该允许中止

  • 或使用


    • 我认为您无法更改该消息框

      有两种选择:

      • 在安装新版本之前,您可以使用自己的代码删除目标文件,在文件消失之前不允许继续

        [文件]
        来源:“来源:C:\SampleApplicationData\*”;DestDir:“{app}\SampleApp”\
        标志:recursesubdirs createallsubdirs;安装前:强制删除
        [守则]
        程序强制删除;
        变量
        文件名:字符串;
        删除:布尔值;
        开始
        文件名:=ExpandConstant(当前文件名);
        重复
        如果文件不存在(文件名),则
        开始
        日志(格式('文件%s不存在',[文件名]);
        已删除:=真;
        结束
        其他的
        如果删除文件(文件名),则
        开始
        日志(格式('文件%s已删除',[文件名]);
        已删除:=真;
        结束
        其他的
        开始
        MsgBox(格式('Error deleting%s',[FileName]),mbError,MB_OK);
        删除:=假;
        结束;
        直至删除为止;
        结束;
        
        尽管我仍然相信代码至少应该允许中止

      • 或使用


      如果您使用自己的代码删除文件,并且任何文件都在使用中,您可以提示重试,而无需取消/跳过选项。尝试方式,用户将不得不继续尝试,直到文件最终被删除。然后安装将继续进行,不会出现任何问题,因为它将安装到一个空文件夹中。这不是你想要的吗?请看我更新的答案(这与我最初提出的解决方案有点不同/更好/更简单)。我已经在本地计算机上成功地测试了你的代码,但现在我已经在我们的测试环境中试过了。现在我收到一条新的错误消息,在尝试重命名目标目录中的文件时出错:MoveFile失败;代码183。如果文件已存在,则无法创建该文件。我得到一个弹出窗口,就像在第一篇文章(重试、跳过、取消)中一样。您删除文件的代码已经完成,没有任何错误,并且该文件在networkfolder中不再存在。我认为它被锁定在后台的某个地方,因为第二个客户端上打开了应用程序。所以
      DeleteFile
      成功了,但文件仍然存在?当显示错误时,您是否检查了文件是否仍然存在替换
      日志(格式('文件%s已删除',[FileName])带有
      日志(格式('文件%s已删除-存在?%d',[FileName,FileExists(FileName)])
      并发布新日志。您可以尝试使用
      SaveStringToFile
      检查是否可以创建文件。如果您使用自己的代码删除文件,并且任何文件都在使用中,则可以提示重试,而无需取消/跳过选项。尝试方式,用户将不得不继续尝试,直到文件最终被删除。然后安装将继续进行,不会出现任何问题,因为它将安装到一个空文件夹中。这不是你想要的吗?请看我更新的答案(这与我最初提出的解决方案有点不同/更好/更简单)。我已经在本地计算机上成功地测试了你的代码,但现在我已经在我们的测试环境中试过了。现在我收到一条新的错误消息,在尝试重命名目标目录中的文件时出错:MoveFile失败;代码183。如果文件已存在,则无法创建该文件。我得到一个弹出窗口,就像在第一篇文章(重试、跳过、取消)中一样。您删除文件的代码已经完成,没有任何错误,并且该文件在networkfolder中不再存在。我认为它被锁定在后台的某个地方,因为第二个客户端上打开了应用程序。所以
      DeleteFile
      成功了,但文件仍然存在?当显示错误时,您是否检查了文件是否仍然存在替换
      日志(格式('文件%s已删除',[FileName])带有
      日志(格式('文件%s已删除-存在?%d',[FileName,FileExists(FileName)])
      并发布新日志。您可以尝试使用
      SaveStringToFile
      检查是否可以创建该文件。