문제

UAC가 켜져 있다고 가정합니다. 이것은 문제를 일으키지 않습니다.

백업/복원 기능이 있고 SQL Server 2005 Express를 사용하는 AC# 앱이 있습니다.

백업을 얻는 코드 백업 및 복원 모두에 사용되며 모든 목적의 이름은 Backup.dat입니다.

백업 경로를 생성합니다

string path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
 path = Path.Combine(path, "CompName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 path = Path.Combine(path, "AppName");
 if(!Directory.Exists(path))
        Directory.CreateDirectory(path);
 return path;

백업시 db는 ** c : programData compname appName **에서 백업을 생성하며 해당 위치에서 사용자 선택의 대상 디렉토리로 지핑하는 데 어려움이 없습니다.

복원시 보관 된 디렉토리 나 파일을 얻는 데 아무런 문제가 없지만 압축을 압축하면 ** C : Users username AppData local virtualstore programData compname appName **로 이동합니다.

비스타 SQL 서버에 대한 프로그래밍에 대한 이해가 가상 저장 경로에 액세스 할 수 없거나 액세스 할 수 없어야하므로 DB를 복원 할 수 있으므로 DB를 복원 할 수있는 이유를 알아야하는 이유를 알아야합니다.

편집 : 감압을 제공하지 못했습니다. 이것이 문제라고 생각하지 않지만 여기에 있습니다.

private void DecompressArchiveFile(string compressedFile, string backupPath)
{
    GZipStream gzip = new GZipStream(new FileStream(compressedFile, FileMode.Open, FileAccess.Read, FileShare.None), CompressionMode.Decompress, false);
    FileStream fs = new FileStream(backupPath, FileMode.Create, FileAccess.Write, FileShare.None);

    byte[] buffer = new byte[10000];
    int count = -1;
    while (count != 0)
    {
        count = gzip.Read(buffer, 0, 10000);
        fs.Write(buffer, 0, count);
    }
    gzip.Close();
    fs.Close();
}

모든 도움에 감사드립니다 -tk

도움이 되었습니까?

해결책

이 관련 스택 오버플로를 참조하십시오 의문, 특히 링크 이것으로부터 대답:

folderid_programdata / system.environment.specialfolder.commonApplicationData

사용자는 탐색기에서 여기에서 탐색하고 싶지 않을 것이며 여기에서 변경된 설정은 컴퓨터의 모든 사용자에게 영향을 미칩니다. 기본 위치는 Windows Vista 설치시 숨겨진 폴더 인 %SystemDrive % ProgramData입니다. 디렉토리를 만들고 설치 시간에 필요한 ACL을 설정하려고합니다.

따라서 사용자 가이 폴더에 글을 쓸 수 있으려면 설치 프로그램이 실행될 때 적절한 액세스 권한을 부여해야합니다.

그들이 폴더에 대한 쓰기 액세스가 있다면, 나는 당신이 바이러스 화에 문제를 일으킬 것이라고 생각하지 않습니다. 그러나, 당신은 실제로 당신의 매니페스트에 이와 같은 것을 추가함으로써 필요한 권한 수준으로 응용 프로그램을 표시해야합니다 (세부):

<security>
  <requestedPrivileges>
    <requestedExecutionLevel level="asInvoker" />
  </requestedPrivileges>
</security>

이것은 프로세스의 가상화를 비활성화합니다. 보기 아래의 작업 관리자에 "가상화"열을 추가하여 프로세스가 가상화되는지 확인할 수 있습니다.

또한 Directory.createdirectory ()는 부모 디렉토리를 자동으로 생성합니다.

다른 팁

Vista Virtualization 기능을 강타하고 있다고 생각합니다. 이는 오래된 행동 앱이 Vista에서 작동하지 않도록 %ProgramData %에 글을 쓸 수 없습니다.

앱은 % programdata %에서 읽을 수 있지만 쓸 수는 없습니다. 실제로 % programdata % 미만을 쓰려면 상승을 실행해야합니다.

보다 http://technet.microsoft.com/en-us/magazine/cc160980.aspx 자세한 내용은 (데이터 리디렉션).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top