2008-10-14 5 views
9

WinForm 응용 프로그램은 인트라넷의 ClickOnce와 함께 릴리스됩니다. 우리는 격리 된 저장소에 GUI에 대한 개인적인 선호도를 저장합니다. 모든 작품 꽤 괜찮습니다 :)ClickOnce 및 IsolatedStorage

문제는 우리가 응용 프로그램의 새로운 버전을 가지고 우리가 게시 ... 모든 환경 설정이 손실됩니다! 사용자는 각 버전에 대한 선호도를 설정해야합니다.

버전 대신 전체 응용 프로그램의 격리를 고정 할 수 있습니까?

답변

17

범위 범위 범위의 고립 된 저장소가 아닌 범위의 응용 프로그램을 사용해야합니다. 이는 IsolatedStorageFileStream의 오버로드 된 생성자 중 하나를 사용하여 수행 할 수 있습니다.

예 :

using System.IO; 
using System.IO.IsolatedStorage; 
... 

IsolatedStorageFile appScope = IsolatedStorageFile.GetUserStoreForApplication();  
using(IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.dat", FileMode.OpenOrCreate, appScope)) 
{ 
... 

그러나, 지금은 그 유일한 시간 응용 프로그램이 격리 된 저장소를 사용할 수있는 범위이기 때문에 응용 프로그램이 ClickOnce를 통해 시작되면 작업이 코드의 문제로 실행됩니다. ClickOnce를 통해 (Visual Studio 등을 통해) 실행하지 않으면 GetUserStoreForApplication()이 예외를 throw합니다.

방법은 주위 문제가 있는지 AppDomain.CurrentDomain.ActivationContext 응용 프로그램이 격리 된 저장소를 범위 사용하기 전에 null이 아닌지 확인하는 것입니다.

+0

나는 그것을 시도 할 것입니다. 아직 최고의 답변으로 보입니다. –

+0

VS에서 실행 중이므로 오류가 발생하지 않습니다. 나는 실제 배치로 아직 테스트하지 않고 당신의 대답을 받아들입니다. 나는 그것이 작동하지 않으면 여기에 다시 쓸 것입니다. Thx –

+3

또는 * System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed *를 사용하여 응용 프로그램이 ClickOnce와 함께 배포되었는지 확인하고 GetUserStoreForApplication()을 사용할 수 있습니다. – bithavoc

1

영구적 인 버전의 사용자 설정을 데이터베이스와 같이 더 오래가는 저장소에 저장해야합니다. 응용 프로그램은 격리 된 저장소를 사용할 수있는 경우 사용하도록 결정할 수 있습니다. 사용할 수없는 경우 (최신 버전으로 인해) 앱은 데이터베이스에서 설정을 가져 와서 고립 된 저장소에서 설정을 다시 초기화해야합니다. 설정이 변경되면 두 위치를 모두 업데이트해야합니다. 더 최신 버전의 응용 프로그램이 없으면 응용 프로그램이 DB에서 설정을 가져올 필요가 없습니다.

+0

: P 당신은 설정을 저장할 수 있습니다 –

+0

가의 특정 위치에 파일을 사용자의 하드 드라이브가 있지만 앱을 완전히 신뢰해야합니다. –

4

이전에 ClickOnce 앱을 사용하고 있었고 Environment.GetFolderPath (ApplicationData)를 사용했습니다. 예 : 로밍 앱 데이터 폴더에 모든 설정을 저장합니다. 일을 잘하고 수많은 업데이트에서 살아 남았습니다. app 또는 CompanyName/AppName 등의 이름으로 하위 디렉토리를 만들고 그 안에 모든 것을 저장하면됩니다.

0

다른 답변에서 요약 : 마일 초기 생각은했지만, 그들은 작업 주위에 있다면 내가 알고 흥미로웠다

IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio 
if (System.Deployment.Application.ApplicationDeployment.IsNetwor‌​kDeployed) 
{ 
    isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications 
}