首次在客户端机器上安装/部署
我们有一个Silverlight ASP .NET Web应用程序,它需要与Sql Server数据库一起部署在客户端的服务器上。一旦他们部署在他们的服务器上,许多工作站就可以访问它并运行Silverlight客户端。首次在客户端机器上安装/部署
我在想创建一个小的部署项目,为资源添加必要的脚本文件,并创建一个msi安装完成后,我们可以执行sql脚本来添加数据库及其表格。我不确定这是否可行,是否有更好的方法?另外,如果将来有更新的app/db,它如何在服务器上完成(无提示更新/安装)?
任何链接/步骤/过程是高度赞赏。
谢谢!
感谢您的回复Baldy。这正是我所想和做的小测试。我有一个带有一个标签的简单的ASP .NET Web应用程序,一个具有覆盖方法的类库项目Install(创建一个批处理文件并执行它),一个实际安装的WebSetup项目,在安装过程中它将执行Install方法类图书馆项目。下面的代码 -
1)ClassLibrary项目 - MyCustomAction
<RunInstaller(True)> _
Public Class SetupAction
Inherits Installer
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
Try
My.Computer.FileSystem.WriteAllText("E:\SetupTest.txt", Environment.NewLine + "File created from MyCustomAction project", True)
'Shell("SQLCMD -S Dev1 -d Prac -i ""E:\Copy of CreateTable1.sql""", AppWinStyle.MinimizedFocus, True, 5000)
File.WriteAllText("E:\Test.bat", "SQLCMD -S Dev1 -d Prac -i ""E:\CreateTable1.sql""")
Process.Start("E:\Test.bat")
Catch ex As Exception
My.Computer.FileSystem.WriteAllText("E:\ErrorLog.txt", Environment.NewLine + "Exception: " + ex.Message, True)
Finally
End Try
End Sub
End Class
2)ASP .NET项目 - 所有MyApplication
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = "Current Time: " + Now.ToString
End Sub
End Class
3)WebSetup项目 - MyApplicationSetup
- 我有将上述项目的项目输出添加到它
- 我添加了一个新的“Tnstall”CustomAction引用它到MyCustomAction类库项目的输出
- 当我构建msi安装程序并安装Web安装应用程序时,它会安装(复制输出文件),并创建SetupTest.txt ,Test.bat文件,但它既不成功执行Shell命令行语句也不执行Process.Start()。
- 一旦bat文件被创建,如果我手动双击它执行sql脚本文件。
作为一个方面说明,如果我在一个单独的Windows应用程序中运行CustomAction代码,它会非常好地执行。所以,看起来像安装时,它不能执行命令行命令(虽然我确实在任务管理器中看到了cmd.exe/SQLCMD.exe)。我不确定这是否是一个权限问题,但我在管理员组中并拥有必要的权限。
将这些注释写入“我的答案”部分可能不合适,但想详细说明情况。我真的坚持这一点,如果任何人都可以抛出提高/替代方法的指针,将是非常有益的。在此先感谢,并非常感谢帮助。
您可以使用MSI创建脚本,然后您应该能够使用sqlcmd或osql命令行实用程序将它们作为安装的一部分运行,您显然需要让用户捕获服务器名称,db名称和凭证作为安装的一部分。
随着数据库模式的更新,您可以通过应用程序中的代码执行此操作,这意味着您需要维护数据库版本以便应用程序知道何时运行该脚本,或只需编写相关的更改脚本语句,并作为部署的一部分在服务器上运行它,再次使用其中一个命令行实用程序。
我想我得到了解决方案,它似乎工作。安装程序能够安装输出文件,并执行Shell()命令来创建表。 原来是NT Authority \ System登录的Sql Server权限问题。我必须将此登录名映射到数据库,授予创建表权限以及datareader和datawriter。希望这可以帮助某人。谢谢! – Vishal 2010-01-07 20:56:34