WinForm 응용 프로그램은 인트라넷의 ClickOnce와 함께 릴리스됩니다. 우리는 격리 된 저장소에 GUI에 대한 개인적인 선호도를 저장합니다. 모든 작품 꽤 괜찮습니다 :)ClickOnce 및 IsolatedStorage
문제는 우리가 응용 프로그램의 새로운 버전을 가지고 우리가 게시 ... 모든 환경 설정이 손실됩니다! 사용자는 각 버전에 대한 선호도를 설정해야합니다.
버전 대신 전체 응용 프로그램의 격리를 고정 할 수 있습니까?
WinForm 응용 프로그램은 인트라넷의 ClickOnce와 함께 릴리스됩니다. 우리는 격리 된 저장소에 GUI에 대한 개인적인 선호도를 저장합니다. 모든 작품 꽤 괜찮습니다 :)ClickOnce 및 IsolatedStorage
문제는 우리가 응용 프로그램의 새로운 버전을 가지고 우리가 게시 ... 모든 환경 설정이 손실됩니다! 사용자는 각 버전에 대한 선호도를 설정해야합니다.
버전 대신 전체 응용 프로그램의 격리를 고정 할 수 있습니까?
범위 범위 범위의 고립 된 저장소가 아닌 범위의 응용 프로그램을 사용해야합니다. 이는 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이 아닌지 확인하는 것입니다.
영구적 인 버전의 사용자 설정을 데이터베이스와 같이 더 오래가는 저장소에 저장해야합니다. 응용 프로그램은 격리 된 저장소를 사용할 수있는 경우 사용하도록 결정할 수 있습니다. 사용할 수없는 경우 (최신 버전으로 인해) 앱은 데이터베이스에서 설정을 가져 와서 고립 된 저장소에서 설정을 다시 초기화해야합니다. 설정이 변경되면 두 위치를 모두 업데이트해야합니다. 더 최신 버전의 응용 프로그램이 없으면 응용 프로그램이 DB에서 설정을 가져올 필요가 없습니다.
: P 당신은 설정을 저장할 수 있습니다 –
가의 특정 위치에 파일을 사용자의 하드 드라이브가 있지만 앱을 완전히 신뢰해야합니다. –
이전에 ClickOnce 앱을 사용하고 있었고 Environment.GetFolderPath (ApplicationData)를 사용했습니다. 예 : 로밍 앱 데이터 폴더에 모든 설정을 저장합니다. 일을 잘하고 수많은 업데이트에서 살아 남았습니다. app 또는 CompanyName/AppName 등의 이름으로 하위 디렉토리를 만들고 그 안에 모든 것을 저장하면됩니다.
다른 답변에서 요약 : 마일 초기 생각은했지만, 그들은 작업 주위에 있다면 내가 알고 흥미로웠다
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();//for visual studio
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();//for click once applications
}
나는 그것을 시도 할 것입니다. 아직 최고의 답변으로 보입니다. –
VS에서 실행 중이므로 오류가 발생하지 않습니다. 나는 실제 배치로 아직 테스트하지 않고 당신의 대답을 받아들입니다. 나는 그것이 작동하지 않으면 여기에 다시 쓸 것입니다. Thx –
또는 * System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed *를 사용하여 응용 프로그램이 ClickOnce와 함께 배포되었는지 확인하고 GetUserStoreForApplication()을 사용할 수 있습니다. – bithavoc