Batch file 使用Visual Studio 2013在MSI安装后执行批处理脚本的最终/保证方法

Batch file 使用Visual Studio 2013在MSI安装后执行批处理脚本的最终/保证方法,batch-file,visual-studio-2013,windows-installer,installation,Batch File,Visual Studio 2013,Windows Installer,Installation,我一直在拼凑一些安装后的步骤,但有困难,我将进入。请推荐一个合适的、理想的本地进程,以便在安装后运行一些自定义步骤 使用: Visual Studio 2013终极版 设置: vb.NET项目和Visual Studio灌输项目 测试操作系统: 与管理员一起赢得7 x64 目前,安装程序已成功安装主应用程序,并将MS SQL Express+SQL脚本提取到子目录。我在同一目录中有一个批处理文件(“InstallSQL.bat”),它以静默方式安装SQLExpress,然后执行SQL脚本 那么,

我一直在拼凑一些安装后的步骤,但有困难,我将进入。请推荐一个合适的、理想的本地进程,以便在安装后运行一些自定义步骤

使用: Visual Studio 2013终极版

设置: vb.NET项目和Visual Studio灌输项目

测试操作系统: 与管理员一起赢得7 x64

目前,安装程序已成功安装主应用程序,并将MS SQL Express+SQL脚本提取到子目录。我在同一目录中有一个批处理文件(“InstallSQL.bat”),它以静默方式安装SQLExpress,然后执行SQL脚本

那么,当VisualStudio不支持批处理执行时,如何最好地从安装程序自定义操作执行“InstallSQL.bat”脚本呢

我尝试过的方法:

  • 添加cmd.exe(32位和64位)+安装程序自定义操作以启动脚本,如下所示。由于某些原因,cmd.exe使用非管理员凭据执行,SQL安装程序失败

  • 使用VBS脚本启动批处理脚本。VBS脚本未运行,出现错误“无法运行完成此安装所需的脚本”

  • 我很乐意考虑一种替代的方法来安装SQL Express和运行脚本,而不是基于批处理文件。但是,当手动运行(即不是从安装程序运行)时,我的自定义批处理文件工作正常


    请注意,它需要在Windows XP和更高版本上工作,不区分位置,即没有静态文件位置,理想情况下,不使用第三方实用程序。最后一个要求很弱。

    我使用配置文件来实现这一点

    "YourSQLExeFile" /CONFIGURATIONFILE="FullPath\YourConfigFile"
    

    您没有指定正在使用的SQL的版本(2008/2012/2014等)。你可以通过谷歌搜索找到例子。。。否则,如果您使用SQL版本进行回复,我可能会与您分享我使用的内容。

    这是非常容易出错的,您最好在应用程序首次运行时将其作为应用程序配置的一部分

    任何使用用户凭据运行的自定义操作代码(通常是因为它是“仅限我”安装)都不会运行

    在每台机器Everyone安装中运行的任何自定义操作代码都将与系统帐户一起提升运行,这通常没有帮助,因为系统帐户没有数据库凭据或网络凭据(如果数据库位于网络共享上,则无法工作)

    如果vbscript失败,则需要使用详细日志进行安装,以获取诊断信息。一个常见的错误是使用WSScript对象,但只有在使用WSH启动脚本且Windows Installer不是WSH时,该错误才可用

    这就是为什么最好在安装后执行此操作,由用户启动,而不是由使用系统帐户运行的msiexec进程或模拟安装用户启动

    从安装中执行此操作的最大希望是编写代码来读取该脚本并配置数据库。SQLCommand类,例如,如下所示:

    此可执行文件需要一个请求管理员权限的清单,因此当它运行时会提示提升。您可以通过VBScript自定义操作启动此程序。关键是,此提升以及它的shell作为一个单独的进程执行的事实使它与调用自定义操作的msiexec.exe服务进程有一定的独立性。同样,Everyone和Just me安装将产生不同,您可能会发现您的可执行文件最终会与系统帐户一起运行。好消息是,如果这在安装时不起作用,你只需要安排它在第一次有人运行你的应用程序时运行,在正常的交互用户环境中运行,当然你可以用正常的方式测试和调试它