2013-07-05 1 views
0

InnoSetup을 통해 Program Files \ FolderName에 기본적으로 설치되는 단일 실행 파일이 있습니다. exe는 새로운 버전을 확인하기 위해 온라인으로 이동하여 다운로드 한 타사 구성 요소를 가지고 있습니다. 그런 다음 EXE 간단한 구성 요소를 교체하기 위해 약간의 노력을합니다. 문제는 프로그램 파일에서 필요한 보안 때문에이 작업을 수행 할 수 없다는 것입니다. 나는 Windows 7 - Can't update my program's files in C:\Program Files을 읽었으며 David Hefferman은 솔루션을 제공했지만 으로 생각됩니다.하지만 나쁜 아이디어가 그의 해결책이나 OP의 의견을 언급하는지는 잘 모르겠습니다!Program Files에서 자체 소프트웨어 업데이트

그래서 프로그램이 스스로 업데이트 할 수있는 선호되는 방법은 무엇입니까? 하나는 XPSP3에서 Win8까지 작동합니다. 관련 결과를 제공하는 Google에 들어가기위한 올바른 문구를 찾지 못하는 것 같습니다. 단순성을 위해 지금은 디지털 서명 등을 무시하십시오.

(필자가 의견 질문으로 말했던 것처럼 보일지 모르지만, 필자가 찾을 수없는 일부 MS가 보증하는 방법이 있어야합니다.) FWIW 이것은 델파이 프로그램이지만 Win32 메모 할 것)

+2

허용되는 DACL을 프로그램 파일로 저장하는 것은 문제의 해결책이 아닙니다. 나는 직접 질문에 답한 다음, 제안 된 해결책이 좋지 않다는 의견을 발표했다. 따라서 프로그램 파일에서 DACL을 고려하지 마십시오.업데이트를 다운로드하고 쓰기 가능한 위치로 다운로드 한 다음 프로그램 파일을 업데이트해야하는 경우 업데이터가 필요합니다. –

+0

맞아, 내게는 약간 애매했고 OP의 의견에 도움이되지 않아서 그 질문에 추가하는 것보다 새로운 질문을 시작했다. 내 자신의 불확실성에 혼란을 쏟고 싶지 않았다. 감사. – GeoffM

답변

1

타사 업데이트 유틸리티를 관리자 권한으로 실행해야하는 경우이를 프로그래밍 방식으로 얻을 수 있습니다.

Program Files에 응용 프로그램을 설치하는 데는 아무런 문제가 없습니다. 즉,이 폴더의 지정된 목적입니다. 그러나 응용 프로그램에서 사용하는 사용자 데이터는 다른 위치에 저장해야합니다.

그러나 타사 유틸리티를 실행하는 경우 먼저 Windows OS 버전을 확인하여 UAC를 꼭 사용해야하는지 (Vista + ...) 확인한 다음 상승 된 상태로 유틸리티를 실행해야합니다.

+0

구성 요소를 말할 때 실제로 업데이트되는 응용 프로그램과 함께 컴파일됩니다 (DLL/BPL조차도 포함하지 않음). 따라서 자체적으로 업데이트하려는 프로그램은 이상적이지 않은 높은 상태로 실행해야합니다. 그러나 프로그래밍 방식으로 수행 할 수 있다고 말하는 것은 흥미 롭습니다. 데이터는 확실히 사용자 knownfolders에 기록됩니다. 감사. – GeoffM

+0

UAC가 있지만 UAC가 있기 때문에 업데이트를 원할 경우 응용 프로그램이 시작될 때 상승하거나 업데이트해야 할 때 상승해야한다고 UAC가 있습니다. – Peter

+0

예, 왜 ACL이 있고 그 문제를 해결할 필요가 있는지 알지만 최선의 방법은 확실하지 않습니다. 감사. – GeoffM

0

그는 일반 사용자가 "프로그램 파일"에 쓸 수 있도록 시스템을 조작하는 것은 "극히 나쁜 습관"이라고 말합니다.

프로그램이 "프로그램 파일"에 있으면 시스템 관리자 권한으로 설치됩니다. 따라서 시스템 관리자 권한으로 업데이트를 설치해야합니다.

"프로그램 파일"에 쓸 수 있지만 타사 구성 요소가 모든 것을 다른 디렉토리에 설치하는 것이 최선의 방법이 아닌 경우 관리자 권한을 요청하도록 InnoSetup을 구성 할 수 있습니다.

즉 C : \ Your_Program

당신의 제 3 자 구성 요소가 쓸 수있는 그런 식으로.

+0

흠, 일반 사용자가 소프트웨어를 업데이트 할 수 없어야한다고 생각합니다. 이제는 의미가 있습니다. 나는 C : \ My_Program을 원하지 않는다. 사용자와 함께 리드 풍선처럼 떨어질 것이다. – GeoffM

+0

그냥 자신의 프로그램을 생각한다면 가장 좋은 방법은 innosetup을 사용하여 update.exe에 app.exe를 압축하는 것입니다. 업데이트가 최신 버전이면 update.exe를 다운로드하십시오. 업데이트 중에 창에 표고가 필요한 경우 사용자에게 메시지가 표시됩니다. (설정에 따라 패스워드 유무와 관계없이)/silent 스위치로 innosetup을 만들고 최소 사용자 개입으로 실행 한 후에 프로그램을 다시 시작할 수 있습니다. 귀하의 프로그램이 지속적으로 상승하지 않는 경우 (완전하지 않음) – Rik

+0

자동 업데이트되는 다른 프로그램들은 내가 생각하는 표고없이 그렇게 할 수있는 것처럼 보입니다. 혼란 스럽습니다. 내 소프트웨어가 상승 프롬프트를 발생시키는 경우에는 문제가 없습니다. 가장 중요한 것은 "적절한"방식으로 작동하도록하는 것입니다. – GeoffM

-1

여기에 몇 가지 옵션이 있습니다 :

  • 가장 쉬운 : 관리자 권한이 필요 매니페스트와 별도의 프로그램으로 만들 업데이터. 또한 업데이터를 시작할 때 관리자 권한을 요청할 수 있습니다. 또는 별도의 exe 대신 out-of-process COM 개체로 업데이터를 이동할 수 있습니다.
  • 프로그램을 설치할 때 관리자 권한으로 숨겨진 사용자를 만들 수 있습니다. 그런 다음이 사용자의 자격 증명으로 업데이트 프로그램을 실행합니다.
  • 프로그램 설치 중에 시스템 서비스를 설치할 수 있으며이 서비스는 시스템 계정에서 실행됩니다. 따라서 귀하의 업데이터는 서비스로 구현 될 것입니다.
+0

관리자 권한으로 숨겨진 사용자를 만드시겠습니까? 시스템 계정에 서비스를 설치 하시겠습니까? 둘 다 정말 가난한 실천입니다. –

+0

신원을 묻지 않고 소프트웨어를 업데이트해야하는 경우가 있습니다. 그러나 당신이 이것을 필요로하지 않는다면, 적절한 매니 페스트를 가진 별도의 업데이터가 최선의 선택이 될 것입니다. – Torbins

관련 문제