2017-12-17 27 views
-1

이 스크립트는 많은 SSDT 정의에 포함되어 있으며 WIX SQL 확장으로 실행할 수 없으므로 SQLCMD를 사용하여 SQL 스크립트 (SSDT)를 설치하려고합니다. 내 SQL 스크립트 파일을 바이너리로 만들려고합니다. (대상 컴퓨터에 남아 있기를 원하지 않습니다.)WiX에서 SQLCMD를 사용하여 이진 SQL 파일 실행

바이너리 스크립트 (-i)를 사용하려면 SQLCMD 명령을 어떻게 설정합니까?

p.s.

내가이 블로그 시도 : http://neilsleightholm.blogspot.co.il/2008/08/executing-sqlcmd-from-wix.html##

을하지만,이 코드는 바이너리 SQL 파일과 SCLCMD 명령 사이의 링크를 표시하지 않습니다. 누군가 나를 올바른 코드로 도울 수 있습니까?

MSI (들) (4C :

<Binary Id="CreateSchema.sql" SourceFile="..\SQL\CreateSchema.sql" /> 

<CustomAction Id="sqlcmd.cmd" 
      Property="sqlcmd" 
      Value="&quot;sqlcmd.exe&quot; -S [DATABASE_SERVER] 
     -i &quot;[#CreateSchema.sql]&quot; -v var=SYSTEM_USER -o [INSTALLDIR]installSql.log" /> 


<CustomAction Id="sqlcmd" 
      BinaryKey="WixCA" 
      DllEntry="CAQuietExec" 
      Return="check" 
      Execute="deferred" 
      Impersonate="yes" /> 

<InstallExecuteSequence> 
    <Custom Action="sqlcmd.cmd" After="InstallFiles">NOT Installed</Custom> 
    <Custom Action="sqlcmd" After="sqlcmd.cmd">NOT Installed</Custom> 
</InstallExecuteSequence> 

로그 파일이 -i 매개 변수는 모든 파일 이름 값을 가지고 있지 않은 것으로 나타났다 나를 위해 작동하지 않았다 내가 사용되는 코드이며, : 실행중인 작업 : CustomActionSchedule (Action = sqlcmd, ActionType = 1025, Source = BinaryData, 대상 = CAQuietExec, CustomActionData = "sqlcmd.exe"-S (local) -i ": 09 : 58 : 15 : " -v var = SYSTEM_USER -o C : \ installSql.log

+0

파일을 찾을 수 없음을 나타내면 CreateSchema.sql 파일과 연결된 파일 ID가 실제로 올바른지 확인하십시오. – Ritmo2k

+0

예, 동일한 id이며, 이진 테이블 (orca.exe로 열림)에서 ID와 이진 파일을 모두 확인했습니다. – HA21

+0

당신은 SQL 파일이 주위에 붙어 있기를 원하지 않는다고 말하면, 그렇지 않습니다. 너는 결석 한 구성 요소에서 제외 시켰어? [Formatted] (https://msdn.microsoft.com/library/aa368609.aspx)를 살펴보면 내가 생각할 수있는 유일한 것입니다. – Ritmo2k

답변

1

그건 방법이 아니야 <Binary>가 작동합니다. [#FileID] 구문은 구성 요소 파일의 런타임 설치 전체 경로를 동적으로 사용하는 데 사용됩니다.

바이너리는 일반적으로 사용자 지정 작업에 임시 추출 파일로 사용되며,이 경우 SQL 파일입니다.

wix에서 SQL 확장을 살펴보십시오. 최소한의 예로서이 코드를 살펴보십시오.

는 SQL 네임 스페이스를 xmlns:sql="http://schemas.microsoft.com/wix/SqlExtension"

<Binary Id="CreateSchema" SourceFile="..\SQL\CreateSchema.sql" /> 
<sql:SqlDatabase Id="MyDB" Database="[DATABASE]" Server="[DATABASE_SERVER]" /> 

를 추가하고 구성 요소에서 당신은

<sql:SqlScript Id="CreateSchemaScript" BinaryKey="CreateSchema" ExecuteOnInstall="yes" Sequence="1" SqlDb="MyDB"/> 

Here 가능한 모든 요소와 SQL 스키마 정의에 대한 링크입니다 추가 할 수 있습니다. SQL Extension을 많이 사용하지는 않았으므로 설치시 DB를 작성하기 위해 수행해야 할 작업에 대해 더 잘 이해해야합니다.

+0

감사합니다. sqlExtension은 SQL 스크립트가 SSDT 형식이고 SQLCMD를 사용하여 실행할 수 있기 때문에 잘 작동하지 않으므로 sqlExtension을 사용하지 않았습니다. 당신은 내가 앞에 붙어있는 대답을 볼 수 있습니다. – HA21

+0

당신이 뭔가를 알아 낸 한 그 작품 :) –

1

내가 언급 한 것처럼 SQL 스크립트는 SSDT 형식이고 바이너리 파일이므로 (설치가 끝나면 파일이 삭제됩니다) SQLCMD를 둘 다 사용하고 싶습니다.

답변을 찾은 후에 나는 명시 적으로 사용중인 사용자 지정 작업이없는 한 이진 파일을 추출하지 않으므로 WiX [#filekey]를 사용할 수 없다는 것을 이해했습니다. 그래서 결국 가장 좋은 방법은 내 자신에 의해 이진 파일을 추출하는 것을 이해했습니다. 하나의 단일 사용자 지정 작업에 사용 된 단계는 다음과 같습니다.

  1. MSI 이진 테이블에서 이진 SQL 스크립트를 추출합니다.
  2. 이 -i 새로운 파일 경로 (내가 저장 한에)

내가 몇 가지 문제가 발생하는 SQL 파일을 삭제와 로컬

  • 실행 SQLCMD이 파일을 저장하면 저장하면 가치는 언급 디렉터리보다 INSTALLDIR에 대한 파일이 사용자 지정 작업의 시간에 존재하지 않을 수 있으므로 임시 폴더에 저장하거나 디렉터리를 미리 만들어 두는 것이 좋습니다.