2012-06-25 4 views
0

기본적으로 두 번째 프로그램에서 데이터를 내보내고 세 번째 프로그램에 대한 데이터 파일로 가져 오는 VB6 소프트웨어를 유지 관리해야합니다. 그래서,이 가져 오기/내보내기 도구는 Windows 95에서 XP로 몇 년이 지난 지금부터 잘 작동했지만 Vista와 7을 지원하도록 업데이트해야합니다 ... 그리고 세 번째 프로그램의 파일에 시간이 기록되면 실패합니다. 현재 Windows 7에서 테스트를 마쳤으나 Vista에서는 동일하게 적용됩니다. 여기 Windows 7 (UAC)은 내 프로그램이 다른 프로그램이 소유 한 데이터 파일 내부에 기록하는 것을 허용하지 않습니다. 수행하는 방법?

자세히 문제입니다 :

내 프로그램 작성을위한 세 번째 프로그램의 데이터에 도달 할 때, 나는이 오류가 발생합니다 : "런타임 오류 '75': 경로/파일 액세스 오류". 그래서, 내 프로그램은 자신이 소유하지 않은 데이터 파일에 대한 쓰기 권한을 얻으려고하기 때문에 UAC 차단과 같은 소리가납니다. 그런 다음 관리자 권한 또는 XP 호환성을 사용하여 프로그램을 실행하면 오류가없고 세 번째 프로그램의 데이터 파일이 잘 수정됩니다.

현재이 오류를 해결하는 방법은 궁금합니다. (내 작업에 대해 차단되어 있기 때문에 내 프로그램에 치명적입니다 : 데이터를 내보내거나 가져 오기 위해) 프로그램 설치 중 (Inno Setup을 사용하고 있습니다) 또는 실행 중 실행 시간.

올바른 방법은 무엇인가요? "XP 호환성"을 프로그래밍 방식으로 강요하거나 내 프로그램을 관리자 권한으로 시작하도록 강요합니까? 이것을 어떻게 그리고 언제 (설치 중에 또는 런타임에) 달성 할 수 있습니까? 매니 페스트가이 필드의 내용을 변경할 수 있습니까 (현재로서는 어떤 매니페스트도 사용하지 않았습니다)? 방법 (XP 호환성 또는 관리자 권한)이 될 어떤 또한

은,는 UAC는 모든 발사에서 시스템 변경에 대해 사용자에게 경고 : 매우 성가신 :(

그래서, 내 프로그램을 가지고 무엇을 매끄럽게에서 실행 이 XP에서와 마찬가지로 Windows 7 및 Vista는, 그 (그것의 주요 목적이기 때문에) 타사 데이터 파일에 적어보다 다른 선택의 여지가 없습니다 알고

당신의 조명 응답을 기다리는 중 ...

PS? 또한 (중요 할 수도 있음) 내 프로그램은 데이터 파일의 경로를 알지 못하지만 공통 d를 사용하여 선택하는 사용자입니다 ialog.


좋아, 나는 몇 가지 뉴스로 돌아왔다. VB6 용 Manifest Creator (그의 대답에 Matt이 표시 한)를 사용하여 level = "requireAdministrator"인 manifest를 임베드했습니다.

내 프로그램이 관리자로 로그온하면 아무런 질문없이 설치되고 프로그램이 질문없이 실행되고 작업을 수행합니다 (내 프로그램이 소유하지 않은 파일을 읽고 쓰십시오) 어떤 질문도없이 아주 창백하다. 그래서,이 경우 완벽 해! 나는 간단한 사용자로 기록하고있어 경우

그럼에도 불구하고,이 관리자 암호로 허가를 요청 후에 잘 설치 후 프로그램이 어떤 질문없이 시작됩니다,하지만 (이 나머지 문제가) 내가 "경로에 다시 가을/파일 액세스 오류 "(오류 '75') 외부 파일 (내 프로그램 소유가 아닌)을 읽거나 쓸 때가되었습니다.

그래서이게 내 추가 질문입니다. 간단한 사용자로 기록되는이 오류를 해결하는 방법은 무엇입니까? 이것은 고도가 작동하지 않았다는 의미입니까 (설치, 시작, 읽기/쓰기 등 다른 단계에서는 작동하지 않는 것처럼 보입니다). 여기 내 마음 속에서 조금 혼란 스럽네요 ...

EDIT : 글쎄, 나는 물건을 이해했지만, 당신의 확인이 필요하다고 생각한다. 내 프로그램 B에 전화 할게.B는 프로그램 A가 소유 한 데이터를 읽거나 가져오고 프로그램 C가 소유 한 데이터에 쓰거나 내 보냅니다.

단순한 사용자로 기록 된 B를 재설치했지만 여전히 설치되어 있던 프로그램 A 및 C는 다시 설치하지 않았습니다. 관리자로 기록됩니다. 따라서 B가 A에 대한 데이터를 읽을 때가되면 높이에도 불구하고 A 데이터가 관리자에 의해 소유되기 때문에 실패합니다 (이러한 A 데이터는 사용자 별 경로가 아니지만 "C : \ email_data ").

간단한 사용자로 기록되는 세 가지 프로그램을 모두 다시 설치하면 경고 또는 오류없이 작동합니다.

권한 상승이 작동하여 (프로그램이 관리자 권한을 얻을 수 있어야 함), 프로그램 B (사용자가 설치 한 프로그램)가 프로그램 A (관리자가 설치 한 프로그램)에 대한 데이터를 읽을 수없는 이유는 무엇입니까? Inno Setup 과정에서 무언가를 추가하여 내 프로그램을 관리자로만 설치해야합니까 (A와 C 프로그램이 설치되는 방식에 영향을주지는 않습니다).

+0

가져 오는 파일은 어디에 있습니까? 다른 사용자가 액세스 권한을 필요로하는 경우 반드시 권한을 적절히 설정해야합니다. – Deanna

+0

프로그램이 설치된 경로를 변경할 수 있습니까? Windows Vista/7에서는 상승 된 실제 관리자 만 Program Files에 쓸 수 있습니다. 사용자가 전체 쓰기 권한을 가진 폴더에 응용 프로그램을 넣는 경우. 제한된 (일반) 사용자가 데이터 파일을 수정할 수 있도록 파일의 사용 권한을 수정하고 모든 실행 파일이 보호됩니다. 즉, 관리자 만 쓰기 및/또는 삭제할 수 있습니다. 이러한 방법으로 UAC 경고를 피할 수 있습니다. UAC를 끄는 것을 제외하고는 그들을 억제 할 수있는 방법이 없습니다. –

답변

0

외부 매니페스트 파일 (myapp.exe.manifest)을 사용하거나 도구를 사용하여 exe와 리소스에 manfiest를 포함 할 수 있습니다.

사용할 수있는 콘텐츠가 많습니다. Google에서 바로 사용할 수 있습니다.

당신은 그들이 응용 프로그램을 실행할 경우 권한에 대해 사용자에게 메시지를 표시 할 수준 "requireAdministrator"를 변경해야
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="asInvoker" uiAccess="false"/> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

(자신의 UAC 설정에 따라) : here에서 나는 샘플 매니페스트를 잡았다. UAC가 활성화되면 %Program Files% 디렉토리는 윈도우 7에서 보호

+0

감사합니다. 제게 준 링크 뒤에있는 페이지를 읽고 이해하기 시작했습니다. – hilow

0

이 당신이 발생하는 문제가

(당신은 상승 된 권한이 직접 작성해야합니다).

'기존'프로그램이 더 원활하게 작동하도록 (즉, 오류가없는 상태에서) Windows 7은 folder redirection을 사용합니다. 이렇게하면 기존 응용 프로그램이 프로그램 파일 디렉토리에있는 사본을 읽고 쓸 수 있습니다.

매니페스트를 사용하는 경우 응용 프로그램이 UAC를 인식하므로 폴더 리디렉션이 수행되지 않지만 프로그램 파일을 읽고 쓰려면 승격 된 (관리자) 권한이 있어야합니다.

매니페스트를 사용하는 방법에 대한 많은 예제가 있습니다. 내 개인적인 선호도는 Manifest Creator입니다.

requestedExecutionLevel"requireAdministrator"으로 설정하면 실제 폴더를 읽고 쓰지만 앱 실행시 UAC 권한 상승을 묻는 메시지가 표시됩니다.

솔루션은 실제로 프로그램 파일 위치를 읽고 쓰지 않고 다른 위치를 사용하는 것입니다. 이것에 대한 해결책은 this stack overflow question을보십시오.

+1

* 아니요 * 매니페스트가있는 앱이 리디렉션됩니다. 매니페스트를 활용하면 응용 프로그램에서 UAC가 폴더 리디렉션을 가져 오지 않고 대신 경로/승인 오류를 인식 할 수 있음을 나타냅니다. – tcarvin

+0

예, 매니페스트에'requestedExecutionLevel' 요소가있는 응용 프로그램은 가상화를 얻지 못하고 폴더 리디렉션이 활성화되어 있습니다. –

+0

@tcarvin - 예. 내 실수 - 내 게시물을 편집했습니다. –