如何更新自包含的asp.net核心应用程序并避免文件锁定

时间:2017-02-20 06:52:46

标签: asp.net-core .net-core

我在Windows Server 2012上的企业环境中部署并使用了自托管的asp.net核心应用程序。

我正在寻找一种自动化更新过程的方法,我目前正在通过bat文件执行此操作,但在无法删除文件的情况下继续获取Windows文件锁定错误。我在bat文件中遵循的过程如下:

  1. 终止网络应用的dotnet核心流程

  2. 清除目录(睡眠几秒钟后)

  3. 通过

  4. 复制更新
  5. 重新启动网络应用

  6. 我收到2中的错误,我试图清除仍然有文件锁的现有目录,即使我已经杀死了进程 - "无法删除输出文件 - 访问被拒绝"。

    我的问题是如何升级自包含的asp.net核心Web应用程序并避免文件锁定?如果网站离线几秒钟,则不是问题。

    由于

1 个答案:

答案 0 :(得分:1)

我可以想到几个原因,删除目录会导致拒绝访问错误。

  1. 您的流程尚未实际停止。我知道你可以使用powershell来等待porcess停止。 (或检查过程是否已经停止,否则等待3秒钟)
  2. 另一个进程仍在此文件夹中运行。 (甚至可能是命令行,或者在文件夹中打开explorer.exe。)
  3. 您需要管理员权限才能删除此文件夹。
  4. 您正在执行的bat文件从此目录执行,并且本身正在锁定目录。
  5. 请尝试以下方法之一:

    尝试运行powershell等例如(在命令行中):

    powershell -Command "Wait-Process -Name MyProcess"` 
    

    (警告您可能会遇到ExecutionPolicy问题)

    提示

    使用msdeploy,您可以远程执行命令并部署您的应用程序。

    您可以使用前后脚本(停止和启动应用程序)和msdeploy it self将为您同步文件夹/目录。