2010-01-04 92 views
1

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

我在想创建一个小的部署项目,为资源添加必要的脚本文件,并创建一个msi安装完成后,我们可以执行sql脚本来添加数据库及其表格。我不确定这是否可行,是否有更好的方法?另外,如果将来有更新的app/db,它如何在服务器上完成(无提示更新/安装)?

任何链接/步骤/过程是高度赞赏。

谢谢!

回答

0

感谢您的回复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)。我不确定这是否是一个权限问题,但我在管理员组中并拥有必要的权限。

将这些注释写入“我的答案”部分可能不合适,但想详细说明情况。我真的坚持这一点,如果任何人都可以抛出提高/替代方法的指针,将是非常有益的。在此先感谢,并非常感谢帮助。

+0

我想我得到了解决方案,它似乎工作。安装程序能够安装输出文件,并执行Shell()命令来创建表。 原来是NT Authority \ System登录的Sql Server权限问题。我必须将此登录名映射到数据库,授予创建表权限以及datareader和datawriter。希望这可以帮助某人。谢谢! – Vishal 2010-01-07 20:56:34

0

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

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