首次在客户机上安装/部署

时间:2010-01-04 22:06:16

标签: asp.net sql-server deployment silverlight-3.0

我们有一个Silverlight ASP .NET Web应用程序,需要与Sql Server数据库一起部署在客户端的服务器上。一旦他们在他们的服务器上部署,许多工作站就可以访问它并运行silverlight客户端。

我正在考虑创建一个小型部署项目,向资源添加必要的脚本文件,并创建一个msi安装完成后,我们可以执行sql脚本来添加数据库及其表。我不确定这是否可行,是否有更好的方法呢?此外,如果app / db有任何未来更新,如何在服务器上完成(静默更新/安装)?

非常感谢任何链接/步骤/程序。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用MSI创建脚本,然后您应该能够使用sqlcmd或osql命令行实用程序作为安装的一部分运行它们,您显然需要让用户捕获服务器名称,数据库名称和凭据作为安装的一部分。

通过更新数据库模式,您可以通过应用程序中的代码执行此操作,这意味着您需要在某处维护数据库版本,以便应用程序知道何时运行脚本,或者只编写相关的alter语句脚本,并在部署时在服务器上运行它,再次使用其中一个命令行实用程序。

答案 1 :(得分:0)

感谢Baldy的回复。这正是我的想法并做了一个小测试。我有一个简单的ASP .NET Web应用程序,带有一个标签,一个类库项目,它有一个覆盖方法Install(创建批处理文件并执行它),wand一个实际安装的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)。我不确定这是否是一个权限问题,但我在管理员组中并拥有必要的权限。

在“我的答案”部分写下这些评论可能不合适,但想详细解释一下情况。我真的坚持这个,如果有人可以提出改进/替代方法的指针,将非常有帮助。在此先感谢,非常感谢您的帮助。