2010-01-04 93 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名稱和憑證作爲安裝的一部分。

隨着數據庫模式的更新,您可以通過應用程序中的代碼執行此操作,這意味着您需要維護數據庫版本以便應用程序知道何時運行該腳本,或只需編寫相關的更改腳本語句,並作爲部署的一部分在服務器上運行它,再次使用其中一個命令行實用程序。