0

我计划使用现有程序的高级版本向客户发布我们的软件,该程序使用 Windows 批处理脚本。我希望改进此过程并自动安装以下项目:

  • 文件。文件被简单地复制到目的地。
  • MSSQL 数据库。我想我会使用 OSQL 命令对数据库运行这些命令。
  • IIS 虚拟目录。Windows 的服务器版本通常安装了 IIS 工具包,其中包含一些用于从命令行创建虚拟目录和诸如此类的工具,所以我将使用它。我认为“iiscnfg”是我用来将以前保存的配置文件插入 IIS 的那个
  • Windows 服务。我们的服务能够从命令行自行安装。

因此,对于每个应用程序部署,我都有这样的结构:

Releases\
| get-release.bat
| Release1\
| Release2\
| Release3\
| | Content\
| | | Application1\
| | | | bin\
| | | | | Application1.exe
| | | | etc\
| | | | | Application1.config
| | | | db\
| | | | | CreateDatabase.sql
| | | | | CreateTable1.sql
| | | | | CreateTable2.sql
| | | | iis\
| | | | | Application1Web.xml
| | | | pre.bat
| | | | post.bat
| | | | environment.bat
| | | Application2\
| | | Application3\
| | | Application4\
| | Release1.doc

所以基本上你打开一个终端和 CD 到 Releases 目录,运行类似的命令:

get-release "Release3"

这将在 Release3 目录中的所有应用程序上运行一系列命令,并复制所有文件、配置、安装所有数据库和 iis 虚拟目录。

它还有一些其他功能,例如备份文件的目标目录等,但目前无关紧要。

我的问题是,是否有人有这样的部署经验,如果有任何错误,我可以从其他人的经验中学习。

不幸的是,我们不能使用 MSI 软件包或 NullSoft 软件包(我暂时不知道他的名字)。如果它不是这样完成的,它是手动完成的,所以我真的想在这里帮助自己。

4

2 回答 2

1

我认为使用批处理文件执行此类操作没有任何问题。但是,您将不得不考虑机器之间的一些差异(缺少目录、已经存在的目录、已经存在的文件、文件版本等)可能是什么,解决它们,并在各种机器。

不能使用安装程序太糟糕了,因为安装程序已经为您缓解了大多数这些问题。从本质上讲,您将推出自己的安装程序,并且您不会从安装程序提供给您的经验教训、最佳实践等中受益。

如果没有安装程序,您可能无法做的另一件事是安装一个被操作系统锁定的文件。安装程序通过将文件复制到一个临时位置来处理这个问题,将“重新启动时加载”条目放入注册表,然后要求用户重新启动计算机。

于 2009-07-14T01:55:32.460 回答
1

我已经滚动了几个这样的脚本,最难处理的部分是错误处理——你如何检测错误,当它们发生时你会做什么,你能回滚迄今为止所做的所有更改,等等。如果您正在执行全新安装,则相对简单,如果您正在更新现有系统,则几乎没有那么简单。(你永远不应该假设它每次都能完美运行——毕竟明天的 MS 更新可能会破坏今天的脚本。)

只有几件事;)你不能从批处理文件中合理地做。你能加入 VB 脚本、java 脚本、一些 Powershell 调用或其他任何东西来处理困难的事情吗?

于 2009-07-15T16:51:32.583 回答