대부분의 애플리케이션은 데이터를 사용하거나 생성합니다. ClickOnce는 로컬 및 원격으로 데이터를 읽고 쓰는 다양한 옵션을 제공합니다.
로컬 데이터
ClickOnce를 사용하면 다음 방법 중 하나를 사용하여 데이터를 로컬로 로드하고 저장할 수 있습니다.
ClickOnce 데이터 디렉터리
격리된 스토리지
기타 로컬 파일
ClickOnce 데이터 디렉터리
로컬 컴퓨터에 설치된 모든 ClickOnce 애플리케이션에는 사용자의 문서 및 설정 폴더에 저장된 데이터 디렉터리가 있습니다. ClickOnce 애플리케이션에 포함되고 "데이터" 파일로 표시된 모든 파일은 애플리케이션이 설치될 때 이 디렉터리에 복사됩니다. 데이터 파일은 모든 파일 형식일 수 있으며, 가장 자주 사용되는 텍스트, XML 및 데이터베이스 파일(예: Microsoft Access .mdb 파일)입니다.
데이터 디렉터리 애플리케이션에서 명시적으로 저장 하 고 유지 관리 하는 데이터 애플리케이션 관리 데이터를 위한 것입니다. 애플리케이션 매니페스트에서 "데이터"로 표시되지 않은 모든 정적 비 종속성 파일은 대신 애플리케이션 디렉터리에 상주합니다. 이 디렉터리에서는 애플리케이션의 실행 파일(.exe) 파일 및 어셈블리가 상주합니다.
비고
ClickOnce 애플리케이션을 제거하면 해당 데이터 디렉터리도 제거됩니다. 데이터 디렉터리를 사용하여 문서와 같은 최종 사용자 관리 데이터를 저장하지 마세요.
ClickOnce 배포에서 데이터 파일 표시
데이터 디렉터리 내에 기존 파일을 배치하려면 ClickOnce 애플리케이션의 애플리케이션 매니페스트 파일에 기존 파일을 데이터 파일로 표시해야 합니다. 자세한 내용은 방법: ClickOnce 애플리케이션에 데이터 파일 포함을 참조하세요.
데이터 디렉터리에서 읽고 쓰기
데이터 디렉터리에서 읽기를 수행하려면 ClickOnce 애플리케이션에서 읽기 권한을 요청해야 합니다. 마찬가지로 디렉터리에 쓰기를 사용하려면 쓰기 권한이 필요합니다. 애플리케이션이 완전 신뢰로 실행되도록 구성된 경우 이 권한이 자동으로 부여됩니다. 권한 상승 또는 신뢰할 수 있는 애플리케이션 배포를 사용하여 애플리케이션에 대한 권한 상승에 대한 자세한 내용은 Secure ClickOnce 애플리케이션을 참조하세요.
비고
조직에서 신뢰할 수 있는 애플리케이션 배포를 사용하지 않고 권한 상승이 해제된 경우 권한 어설션이 실패합니다.
애플리케이션에 이러한 권한이 있으면 내 클래스 System.IO에 대한 메서드 호출을 사용하여 데이터 디렉터리에 액세스할 수 있습니다. Windows Forms ClickOnce 애플리케이션 내에서 데이터 디렉터리의 경로를 얻으려면, DataDirectory에 정의된 CurrentDeployment 속성의 ApplicationDeployment 속성을 사용하세요. 데이터에 액세스하는 가장 편리하고 권장되는 방법입니다. 다음 코드 예제에서는 배포에 데이터 파일로 포함시킨 CSV.txt 텍스트 파일에 대해 이 작업을 수행하는 방법을 보여 줍니다.
비고
네임스페이 ApplicationDeployment 스의 클래스 및 API System.Deployment.Application 는 .NET Core 및 .NET 5 이상 버전에서 지원되지 않습니다. .NET 7에서는 애플리케이션 배포 속성에 액세스하는 새로운 방법이 지원됩니다. 자세한 내용은 .NET의 Access ClickOnce 배포 속성을 참조하세요. .NET 7은 ApplicationDeployment 메서드에 해당하는 메서드를 지원하지 않습니다.
if (ApplicationDeployment.IsNetworkDeployed)
{
try
{
using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
{
MessageBox.Show(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show("Could not read file. Error message: " + ex.Message);
}
}
배포의 파일을 데이터 파일로 표시하는 방법에 대한 자세한 내용은 방법: ClickOnce 애플리케이션에 데이터 파일 포함을 참조하세요.
클래스의 관련 변수(예: Application.)를 사용하여 데이터 디렉터리 경로를 가져올 수도 있습니다LocalUserAppDataPath.
다른 형식의 파일을 조작하려면 추가 권한이 필요할 수 있습니다. 예를 들어 Access 데이터베이스(.mdb) 파일을 사용하려는 경우 관련 <xref:System.Data> 클래스를 사용하려면 애플리케이션이 완전 신뢰를 어설션해야 합니다.
데이터 디렉터리 및 애플리케이션 버전
애플리케이션의 각 버전에는 다른 버전과 격리된 자체 데이터 디렉터리가 있습니다. ClickOnce는 애플리케이션이 런타임에 새 데이터 파일을 만들 수 있는 위치를 없도록 배포에 데이터 파일이 포함되어 있는지 여부에 관계없이 이 디렉터리를 만듭니다. 새 버전의 애플리케이션이 설치되면 ClickOnce는 이전 버전의 데이터 디렉터리의 모든 기존 데이터 파일을 원래 배포에 포함되었거나 애플리케이션에서 만든 새 버전의 데이터 디렉터리로 복사합니다.
데이터 파일의 이전 버전의 애플리케이션에서 새 버전과 다른 해시 값이 있는 경우 ClickOnce는 이전 버전의 파일을 최신 버전의 서버로 대체합니다. 또한 이전 버전의 애플리케이션에서 새 버전의 배포에 포함된 파일과 동일한 이름을 가진 새 파일을 만든 경우 ClickOnce는 이전 버전의 파일을 새 파일로 덮어쓰게 됩니다. 두 경우 모두 애플리케이션이 마이그레이션을 위해 이전 데이터에 계속 액세스할 수 있도록 이전 파일이 데이터 .pre
디렉터리 내의 하위 디렉터리에 포함됩니다.
데이터의 세분화된 마이그레이션이 필요한 경우 ClickOnce 배포 API를 사용하여 이전 데이터 디렉터리에서 새 데이터 디렉터리로 사용자 지정 마이그레이션을 수행할 수 있습니다. 먼저 IsFirstRun을 사용하여 사용 가능한 다운로드를 테스트하십시오. 그런 다음 Update 또는 UpdateAsync을 사용하여 업데이트를 다운로드하십시오. 업데이트가 완료된 후에는 사용자 지정 데이터 마이그레이션 작업을 직접 수행해야 합니다.
격리된 스토리지
격리된 스토리지는 간단한 API를 사용하여 파일을 만들고 액세스하기 위한 API를 제공합니다. 저장된 파일의 실제 위치는 개발자와 사용자 모두에서 숨겨집니다.
격리된 스토리지는 모든 버전의 .NET Framework에서 작동합니다. 격리된 스토리지는 추가 권한 부여 없이 부분적으로 신뢰할 수 있는 애플리케이션에서도 작동합니다. 애플리케이션이 부분 신뢰에서 실행되어야 하지만 애플리케이션별 데이터를 유지해야 하는 경우 격리된 스토리지를 사용해야 합니다.
비고
.NET Core 및 .NET 5 이상용 ClickOnce에서는 코드 액세스 보안이 필요한 부분 신뢰가 지원되지 않습니다. .NET Framework에서 코드 액세스 보안의 사용은 모범 사례가 아니며 권장되지 않습니다.
자세한 내용은 격리된 스토리지를 참조하세요.
기타 로컬 파일
애플리케이션이 보고서, 이미지, 음악 등과 같은 최종 사용자 데이터를 사용하거나 저장해야 하는 경우 애플리케이션은 로컬 파일 시스템에 데이터를 읽고 써야 합니다 FileIOPermission .
원격 데이터
어떤 시점에서 애플리케이션은 고객 데이터 또는 시장 정보와 같은 원격 웹 사이트에서 정보를 검색해야 할 수 있습니다. 이 섹션에서는 원격 데이터를 검색하는 가장 일반적인 기술에 대해 설명합니다.
HTTP를 사용하여 파일 액세스
WebClient 네임스페이스의 HttpWebRequest 클래스 또는 System.Net 클래스를 사용하여 웹 서버에서 데이터를 액세스할 수 있습니다. 데이터는 정적 파일 또는 원시 텍스트 또는 XML 데이터를 반환하는 ASP.NET 애플리케이션일 수 있습니다. 데이터가 XML 형식인 경우 데이터를 가져오는 가장 빠른 방법은 URL을 인수로 받는 메서드가 포함된 클래스 `XmlDocument`을 사용하는 것입니다. 예를 들어 DOM에 XML 문서 읽기를 참조하세요.
애플리케이션이 HTTP를 통해 원격 데이터에 액세스할 때 보안을 고려해야 합니다. 기본적으로 ClickOnce 애플리케이션의 네트워크 리소스에 대한 액세스는 애플리케이션이 배포된 방법에 따라 제한될 수 있습니다. 이러한 제한 사항은 악의적인 프로그램이 권한 있는 원격 데이터에 액세스하거나 사용자의 컴퓨터를 사용하여 네트워크의 다른 컴퓨터를 공격하는 것을 방지하기 위해 적용됩니다.
다음 표에서는 사용할 수 있는 배포 전략과 기본 웹 권한을 나열합니다.
배포 유형 | 기본 네트워크 권한 |
---|---|
웹 설치 | 애플리케이션이 설치된 웹 서버에만 액세스할 수 있습니다. |
파일 공유 설치 | 웹 서버에 액세스할 수 없음 |
CD-ROM 설치 | 모든 웹 서버에 액세스할 수 있습니다. |
보안 제한으로 인해 ClickOnce 애플리케이션이 웹 서버에 액세스할 수 없는 경우 애플리케이션은 해당 웹 사이트에 대해 어설션 WebPermission 해야 합니다. ClickOnce 애플리케이션에 대한 보안 권한을 높이는 방법에 대한 자세한 내용은 Secure ClickOnce 애플리케이션을 참조하세요.
XML 웹 서비스를 통해 데이터에 액세스
데이터를 XML 웹 서비스로 노출하는 경우 XML 웹 서비스 프록시를 사용하여 데이터에 액세스할 수 있습니다. 프록시는 Visual Studio를 사용하여 만든 .NET Framework 클래스입니다. 고객 검색, 주문 등과 같은 XML 웹 서비스의 작업은 프록시에서 메서드로 노출됩니다. 이렇게 하면 원시 텍스트 또는 XML 파일보다 웹 서비스를 훨씬 쉽게 사용할 수 있습니다.
XML 웹 서비스가 HTTP를 통해 작동하는 경우, 서비스는 WebClient 및 HttpWebRequest 클래스와 동일한 보안 제한에 의해 제약을 받습니다.
데이터베이스에 직접 액세스
네임스페이스 내의 System.Data 클래스를 사용하여 네트워크의 SQL Server와 같은 데이터베이스 서버와의 직접 연결을 설정할 수 있지만 보안 문제를 고려해야 합니다. HTTP 요청과 달리 데이터베이스 연결 요청은 부분 신뢰에서 기본적으로 항상 금지됩니다. CD-ROM에서 ClickOnce 애플리케이션을 설치하는 경우에만 기본적으로 이러한 권한이 있습니다. 이렇게 하면 애플리케이션에 완전 신뢰가 부여됩니다. 특정 SQL Server 데이터베이스에 대한 액세스를 사용하도록 설정하려면 애플리케이션에서 요청 SqlClientPermission 해야 합니다. SQL Server 이외의 데이터베이스에 대한 액세스를 사용하도록 설정하려면 요청 OleDbPermission해야 합니다.
대부분의 경우 데이터베이스에 직접 액세스할 필요는 없지만 ASP.NET 또는 XML 웹 서비스로 작성된 웹 서버 애플리케이션을 통해 데이터베이스에 액세스합니다. ClickOnce 애플리케이션이 웹 서버에서 배포되는 경우 이러한 방식으로 데이터베이스에 액세스하는 것이 가장 좋은 방법입니다. 애플리케이션의 권한을 상승하지 않고 부분 신뢰로 서버에 액세스할 수 있습니다.