0

설치 및 배포를 사용하여 설치 프로그램을 만든 Visual Studio 2013에서 C# Windows 응용 프로그램을 실행하고 있습니다. 이 응용 프로그램에서는 테이블 생성 스크립트, 저장 프로 시저 및 모든 스크립트를 실행하는 데이터베이스 배치 파일이있는 별도의 엔터티로 MySQL 데이터베이스를 사용하고 있습니다.설치 도중 응용 프로그램에 기존 데이터베이스 연결 : 설치 프로젝트

하지만이 데이터베이스 후보를 설치 프로그램에 보내야합니다. 커밋 후 커스텀 액션에서 데이터베이스 배치 파일을 실행하는 것과 같은 몇 가지 옵션을 시도했지만 제대로 작동하지 않았습니다. 배치 파일 실행 방법을 사용하지 않으려는 경우 (설치가 끝날 때 배치 파일을 실행하는 옵션이 없기 때문에) 커밋 시간에이 기존 데이터베이스를 설치 프로젝트에 어떻게 추가 할 수 있습니까?

appconfig에서 연결 문자열을 가져 오는 응용 프로그램 코드에서 연결을 처리하고 있습니다.

<connectionStrings> 
    <add name="CRSDatabaseString" connectionString="Server=localhost; Database=Tel_CRS; Uid=root; Pwd=root123; Persistsecurityinfo=True;" /> 
    <add name="CSSDatabaseString" connectionString="Server=localhost; Database=Tel_css; Uid=root; Pwd=root123; Persistsecurityinfo=True;" /> 
    </connectionStrings> 

그리고 응용 프로그램 코드에서 SQL 연결을 다음과 같이이 비주얼 스튜디오 사용자 지정 작업에서 작동하지 않을 수 있습니다 몇 가지 이유가 있습니다

public MySQL_Connection() 
     { 
         String conn =""; 
      if (Bootstrapper.InspectionTarget=="css") 
       conn = ConfigurationManager.ConnectionStrings["CSSDatabaseString"].ConnectionString; 
      else 
       conn = ConfigurationManager.ConnectionStrings["CRSDatabaseString"].ConnectionString; 


      Db_conn = new MySqlConnection(conn); 
      Db_conn.Open(); 
     } 

답변

0

. 가장 일반적으로 사용자 지정 작업은 Everyone (컴퓨터 당) 설치에서 시스템 계정을 사용하여 실행되므로 데이터베이스는 일반적으로 시스템 계정에 대한 액세스를 허용하지 않습니다. 또 다른 하나는 DB가 네트워크에 있지만 시스템 계정에 네트워크 액세스 권한이 없다는 것입니다.

코드가 실행 파일 또는 설치 프로그램 클래스 Dll에서 실행되고 있는지 여부는 명확하지 않지만 코드가 대화 형 사용자 대신 Windows 셸에서 실행될 때와 동일한 컨텍스트에서 실행되지 않는 경우 : 기본 작업 디렉토리가 없습니다 (msiexec.exe 프로세스에서 실행 중입니다). 사용자 프로필 위치에 대한 액세스가 실패합니다 (예 : 시스템 폴더에 데스크톱 폴더가 없음). 설치 프로그램 클래스 Dll에서는 구성 파일/설정 파일을 평소와 달리 리플렉션을 사용하여 인스턴스화하기 때문에 일반적인 방법으로는 사용할 수 없습니다 조립로드 방식. 즉, 대화 형 사용자로 테스트 할 때 코드가 실행된다고해서 시스템 계정으로 실행하고 msiexec.exe 프로세스에서 실행할 때 작동한다는 것을 의미하지는 않습니다.

특히 사용자가 이미 앱을 사용하려고 할 때 (설치가 아닌)이 작업을 수행하는 것이 더 좋을 수 있습니다. 그런 다음 정상적인 사용자 컨텍스트에서 실행되며 실패 할 경우 쉽게 재 시도 될 수 있습니다. 설치 중에 실패하는 경우가 아닙니다.

+0

위의 SQL 연결 코드는 응용 프로그램 exe에서 왔지만 SQL 스크립트를 실행하는 모든 논리는 설치 관리자 클래스에 있습니다. 마지막 단락에서 설치 관리자 클래스가 ONBEFOREINSTALLATION()을 실행하도록 설정 했습니까? 하지만 지금은 SQL 연결 코드도 Installer 클래스에 추가했습니다. – Puneeth

+0

Visual Studio 사용자 지정 작업은 모든 파일이 설치된 후에 실행되므로 "설치 전"은 어떤 일이 발생했는지에 대한 오해의 소지가있는 설명입니다. 또한 DB에 연결하는 오류에 대해 아무 말도하지 않았지만 액세스가 허용되지 않은 사용자에 대한 오류가 발생하면 설치 관리자 클래스 코드가 Everyone 설치에서 시스템 계정으로 실행되기 때문에 가능성이 높습니다. . – PhilDW

관련 문제