1

Visual Studio 2005로 VB.Net로 작성된 응용 프로그램이 있습니다.이 응용 프로그램을 사용하면 프로젝트 파일을 만들고 저장할 수 있습니다. 애플리케이션을 배포 할 때 공통 애플리케이션 데이터 폴더에 설치하는 일부 데모 프로젝트 파일을 포함합니다.응용 프로그램 데이터 파일을 제거 할 때 설치 프로그램이 실행되지 않도록 방지하려면 어떻게합니까?

XP - C : \ 문서 및 설정 \ 응용 프로그램 데이터 \ 모든 사용자

비스타 & 7 - C : \ 내가 예기치 않은 동작이 발견

프로그램 데이터 - 경우 일반적인 응용 프로그램에서 모든 파일 데이터 폴더가 제거되고 응용 프로그램이 시작 메뉴에서 실행되면 설치 절차가 시작되어 누락 된 파일을 복원하려고 시도합니다. MSI 파일이 더 이상 원래 위치에 없거나 변경된 경우 응용 프로그램이 실행되지 않습니다. 나는 이것이 "특징"이라고 생각하지만, 나는 그것을 원하지 않는다. 아무도 무슨 일이 일어나고 있는지, 어떻게 피할 수 있는지 말해 줄 수 있습니까?

좀 더 세부 정보 :

  • 나는 비주얼 스튜디오 배포를 프로젝트를 사용하여 설치 패키지를 만들었습니다.

  • EXE를 직접 실행하면이 문제가 발생하지 않습니다. 따라서 은 동작이 시작 메뉴 바로 가기 과 관련이 있다고 예상합니다. 나는 바로 가기가 보통 지름길이 아니라는 것을 알아 챘다. "대상 위치"가 없다.

모든 조언을 받으실 수 있습니다.

-tc

답변

1

나는이 문제라는 것을 포함 것을 배웠다 "필요시 설치"(일명 "자가 치유"). 설치 패키지에서 생성 된 비정상적인 바로 가기를 "보급 바로 가기"라고합니다. 이제 문제의 이름을 알아 냈으니 해결 방법에 대한 정보를 쉽게 찾을 수 있습니다. 특히 :

그 페이지는 풍부한 정보를 포함하고 있습니다. 이 게시물에 걸려 넘어 질 수있는 다른 사람들의 편의를 위해 나는 그들이 말하는 것을 요약 할 것입니다 :

광고 된 바로 가기는 멋진 일을하는 특별한 지름길입니다. 가장 주목할 만하게, 그들은 그들의 표적을 발사하기 전에 손상 한 신청을 재설치한다. 그들이 선한지, 악한 지, 또는 무해한 지에 대한 몇 가지 논쟁이 있습니다. 제 의견으로는, 그들은 대부분의 사용자가 기대하지 않는 무언가를하고, 그것은 그것들을 사악하게 만듭니다. 따라서 응용 프로그램을 사용하지 않도록 설정하고 싶습니다.

Visual Studio 설치 프로젝트는 기본적으로 보급 된 바로 가기를 생성하는 MSI 패키지를 자동으로 만듭니다. Setup.exe의 명령 줄 인수로 DISABLEADVTSHORTCUTS = 1을 사용하여 MSI 패키지를 설치할 때이 기본값을 다시 정의하는 것이 쉽습니다. 또한 Orca와 같은 유틸리티를 사용하면 DISABLEADVTSHORTCUTS = 1을 MSI의 속성으로 삽입하여 기본값을 수동으로 변경할 수 있습니다. 그러나 Visual Studio에서 보급 된 바로 가기를 만들지 않는 MSI 패키지를 자동으로 만들려면 그 방법이 더 어렵습니다.나는 (내가 아래에 해당 코드를 반복 한) 위의 링크 중 하나 게리 장에서 제공하는 DisableAdvt 코드를 사용하여 VBS 파일을 생성,

  1. 첫째 : 나는 이런 식으로했다. 텍스트 파일을 만들고 코드를 붙여 넣으십시오. DisableAdvt.vbs로 저장하십시오.

  2. 그런 다음 설치 프로젝트의 빌드 후 이벤트를 만듭니다. 정확한 구문은 파일 위치에 따라 다릅니다. 내 DisableAdvt.vbs이 솔루션 폴더의 "도구"하위 폴더에 있기 때문에 내 빌드 후 이벤트는 다음과 같습니다

    • "$ (PROJECTDIR) .. \ 도구 \ DisableAdvt DisableAdvt.vbs \" "$ (BuiltOuputPath) "내가해야 할 일을했을 전부

. 그것은 매력처럼 작동합니다.

-tc

일부 노트 :

비주얼 스튜디오 2005에서 빌드 이벤트들은이 프로젝트의 다른 유형보다 설치 프로젝트에 대해 다르게 접근 할 수 있습니다. 솔루션 탐색기에서 프로젝트 이름을 클릭 한 다음 속성 창에서 PostBuildEvent를 찾습니다.

Orca는 DISABLEADVTSHORTCUTS 속성을 MSI 파일에 수동으로 삽입하는 데 사용할 수있는 유틸리티입니다. 내 접근 방식으로 Orca는 필요하지 않습니다. 그러나 빌드 이벤트가 예상 된 변경을 수행하는지 확인하는 데 유용합니다. 빌드 이벤트에서 http://www.technipages.com/download-orca-msi-editor.html

  • , 오자 "BuiltOuputPath는"의도적이다. 여기

    게리 장의 DisableAdvt.vbs 코드 (I 라인 (21)에 오타 수정주의 - 매우 중요!)입니다 :

    Option Explicit 
    
    Const msiOpenDatabaseModeTransact = 1 
    Dim argNum, argCount:argCount = Wscript.Arguments.Count 
    
    Dim openMode : openMode = msiOpenDatabaseModeTransact 
    
    ' Connect to Windows installer object 
    On Error Resume Next 
    Dim installer : Set installer = Nothing 
    Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : 
    CheckError 
    
    ' Open database 
    Dim databasePath:databasePath = Wscript.Arguments(0) 
    Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError 
    
    ' Process SQL statements 
    Dim query, view, record, message, rowData, columnCount, delim, column 
    
    query = "INSERT INTO Property(Property, Value) VALUES ('DISABLEADVTSHORTCUTS', '1')" 
    Set view = database.OpenView(query) : CheckError 
    view.Execute : CheckError 
    
    database.Commit 
    
    If Not IsEmpty(message) Then Wscript.Echo message 
    Wscript.Quit 0 
    
    Sub CheckError 
        Dim message, errRec 
        If Err = 0 Then Exit Sub 
        message = Err.Source & " " & Hex(Err) & ": " & Err.Description 
        If Not installer Is Nothing Then 
        Set errRec = installer.LastErrorRecord 
        If Not errRec Is Nothing Then message = message & vbLf & errRec.FormatText 
        End If 
    Fail message 
    End Sub 
    
    Sub Fail(message) 
        Wscript.Echo message 
        Wscript.Quit 2 
    End Sub 
    
관련 문제