답장을 보내 주셔서 감사합니다. 이것은 내가 생각하고 작은 테스트를 한 것입니다. 나는 하나의 레이블을 가진 간단한 ASP .NET 웹 애플리케이션을 가지고있다. 하나의 클래스 라이브러리 프로젝트는 메소드를 설치 (배치 파일을 생성하고 실행)하고, 실제로 설치하는 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 내가 가진
- 여기에 코드입니다 위 프로젝트의 프로젝트 산출물을 추가했습니다.
- MyCustomAction 클래스 라이브러리 프로젝트의 출력에 참조하는 새로운 "Tnstall"CustomAction을 추가했습니다.
- msi 설치 프로그램을 빌드하고 웹 설치 응용 프로그램을 설치하면 intalls (출력 파일 복사)를하고 SetupTest.txt , Test.bat 파일을 실행하지만 Shell 명령 줄 문이나 Process.Start()도 성공적으로 실행하지 않습니다.
- 일단 bat 파일이 생성되면 수동으로 두 번 클릭하면 sql 스크립트 파일이 실행됩니다.
별도로 Windows App에서 CustomAction 코드를 실행하면 부작용없이 완벽하게 실행됩니다. 그래서, 설치하는 동안 보이지만 명령 줄 명령을 실행할 수 없습니다 (비록 작업 관리자에서 cmd.exe/SQLCMD.exe를 볼 수 있습니다). 이 권한 문제가 될지 모르겠지만 관리자 그룹에 있고 필요한 권한이 있습니다.
"내 대답"절에이 주석을 쓰는 것이 적절하지 않을 수도 있지만 상황에 대한 자세한 설명이 필요합니다.난 정말이 붙어있어 누군가가 개선/대체 방법에 대한 포인터를 던질 수 있다면 매우 도움이 될 것입니다. 미리 감사 드리며 정말로 도움을 주셔서 감사합니다.
해결책을 얻은 것 같아서 제대로 작동하는 것 같습니다. 설치 관리자는 출력 파일을 설치하고 Shell() 명령을 실행하여 테이블을 만들 수 있습니다. NT Authority \ System 로그인에 대한 SQL Server 사용 권한 문제로 판명되었습니다. 나는 데이터베이스에이 로그인을 매핑해야하고, 데이터 아더 및 데이터 기록자와 함께 테이블 생성 권한을 부여해야합니다. 희망이 사람을 도움이됩니다. 감사! – Vishal