感謝您的回覆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)。我不確定這是否是一個權限問題,但我在管理員組中並擁有必要的權限。
將這些註釋寫入「我的答案」部分可能不合適,但想詳細說明情況。我真的堅持這一點,如果任何人都可以拋出提高/替代方法的指針,將是非常有益的。在此先感謝,並非常感謝幫助。
我想我得到了解決方案,它似乎工作。安裝程序能夠安裝輸出文件,並執行Shell()命令來創建表。 原來是NT Authority \ System登錄的Sql Server權限問題。我必須將此登錄名映射到數據庫,授予創建表權限以及datareader和datawriter。希望這可以幫助某人。謝謝! – Vishal 2010-01-07 20:56:34