>

파일을 사용하고 C #에서 디렉토리를 만드는 것이 비교적 새롭지 만 한동안 고착되어있었습니다.System.UnauthorizedAccessException : ''C : \ Program Files \ Skyroom '경로에 대한 액세스가 거부되었습니다.'라는 오류가 표시됩니다.

여기에 도움이되는 코드는 다음과 같습니다 :

if (File.Exists(@"C:\Program Files\Skyroom\gamedata.txt"))
            {
                Console.WriteLine("Game loading. Please wait..");
                Thread.Sleep(500);
                Console.Clear();
                Console.WriteLine("Game loading. Please wait...");
                Thread.Sleep(500);
                Console.Clear();
                Console.WriteLine("Game loading. Please wait.");
                Thread.Sleep(500);
                Console.Clear();
                Console.WriteLine("Game loading. Please wait..");
                Thread.Sleep(500);
                Console.Clear();
                Console.WriteLine("Game loading. Please wait...");
                Thread.Sleep(500);
                Console.Clear();
            }
            else
            {                
                Directory.CreateDirectory(@"C:\Program Files\Skyroom");
                File.Create(@"C:\Program Files\Skyroom\gamedata.txt");
                Main();
            }

감사합니다. 필요한 정보가 있으면 물어보십시오.

  • 답변 # 1

    앱이 관리자 권한으로 실행되지 않고 관리자 전용 프로그램 파일에 쓰려고하기 때문에 오류가 발생합니다.

    설치 프로그램을 작성하지 않는 한 응용 프로그램은 관리자 권한으로 실행할 필요가 없으므로 프로그램 파일에 쓸 수 있습니다.프로그램 파일은 응용 프로그램이 런타임 데이터를 쓸 수 없습니다. 관리자가 응용 프로그램을 설치할 수있는 안전한 위치입니다. 이 프로세스는 신뢰할 수있는 응용 프로그램 파일이 악의적으로 변경되지 않도록 보호합니다.

    데이터를 ProgramFiles 디렉토리에 쓰지 않아야합니다. Windows에는 % TEMP %, % APPDATA % 및 % LOCALAPPDATA %와 같은 다양한 데이터 쓰기 디렉토리가 있습니다.

    Windows 환경 변수

  • 답변 # 2

    문제는 응용 프로그램을 실행중인 Windows 사용자에게 C:\Program Files\Skyroom\ 폴더에 대한 권한이 없다는 것입니다 .

    몇 가지 옵션이 있습니다. 하나는 디렉토리를 만들 때 사용자에게 읽기/쓰기 권한을 부여하는 것입니다 :

    var skyroomDirectory = Directory.CreateDirectory(@"C:\Program Files\Skyroom");
    DirectorySecurity security = skyroomDirectory.GetAccessControl();
    security.AddAccessRule(new FileSystemAccessRule(@"MYDOMAIN\JohnDoe", 
                            FileSystemRights.Modify, 
                            AccessControlType.Allow));
    skyroomDirectory.SetAccessControl(security);
    File.Create(@"C:\Program Files\Skyroom\gamedata.txt");
    
    

    필요에 따라 적절한 AccessControlType을 사용하십시오. 필요한 작업을 수행하는 데 필요한 최소한의 권한을 사용해야합니다. https://docs.microsoft.com/en-us/dotnet/api/system.security.accesscontrol.filesystemrights?view=netframework-4.7.2

    또 다른 옵션은 파일을 사용자에게 권한이있는 사용자 폴더에 저장하는 것입니다. 그러나 문제는 사용자가 이상한 파일을보고 삭제 할 수 있다는 것입니다.

  • 답변 # 3

    File.Create에 따르면 UnauthorizedAccessException은 다음 두 가지 중 하나를 의미합니다.

    <올>

    발신자에게 필요한 권한이 없습니다. 또는

    경로가 읽기 전용 인 파일을 지정했습니다.

    Directory.CreateDirectory의 경우 다음을 의미합니다.

    <올>

    발신자에게 필요한 권한이 없습니다.

    Program Files 또는 Program File x (86) 아래에 디렉토리를 만들지 않습니다. C : \ Users \와 같이 권한이있는 곳에서 만드는 것이 좋습니다.

    프로그램 파일에서 여전히 생성해야하는 경우 Visual Studio를 관리자로 실행하거나 아래와 같이 매니페스트를 변경하십시오.

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    
    

관련 자료

  • 이전 entity framework - C #에서의 순서를 집계하는 방법은 무엇입니까?
  • 다음 android - 피카소는 ImageView에 URL을로드하지 않습니다 값을 전달할 때 생성자를 던집니다