문제

.NET가 여러 개 있습니다 Windows 형태 내가 a로 변환하기 위해 준비하고있는 응용 프로그램 Clickonce/스마트 클라이언트 배포 시나리오. 나는이 위대한 튜토리얼을 읽지 않았지만 내가 알아야 할 함정이나 "gotchas"가 있습니까?

몇 가지 사소한 응용 프로그램이 사용되어 있지만 메인 응용 프로그램은 C#에 있으며 24/7 실행되며 상당히 크지 만 몇 주마다 변경됩니다. 또한 로그 파일에 로컬로 글을 쓰고 로컬 하드웨어 장치와 대화합니다.

도움이 되었습니까?

해결책

다음은 내가 알고있는 몇 가지가 있습니다.

  1. 데스크탑에 아이콘을 넣을 수 없습니다. 당신은 지금 할 수 있습니다.

  2. 모든 사용자를 위해 설치할 수는 없습니다.

  3. 배포를 다른 서버로 옮기려면 후프를 뛰어 넘어야합니다. 내부적으로 개발중인 경우에는 문제가되지 않으며 사용자가 게시중인 서버를 볼 수 있거나 공개 웹에 배포하는 경우 여러 고객 사이트에 독립적으로 롤아웃 해야하는 경우에는 좋지 않습니다.

  4. 부터 .그물 3.5 SP1 배포 매니페스트에 서명 할 필요가 없으므로 배포를 새 서버로 쉽게 이동할 수 있습니다.

  5. 나는 어셈블리를 설치할 수 없다 GAC. ClickOnce 응용 프로그램의 사전 반품 인 정기적 인 설치 패키지를 만들어이 문제를 해결할 수 있습니다.

다른 팁

  • 업데이트가 배포되면 내장 대화 상자가 전체 응용 프로그램이 다시 다운로드되는 것처럼 나타납니다. 실제로 변경된 DLL 만 다운로드되고 있으며 표시되는 진행률 표시 줄은 오도/잘못되었습니다. 모든 어셈블리가 왜 실제로 그렇지 않다는 것을 발견하기 위해 재배치하는지 알아 내려고 시간을 낭비하지 마십시오. 내가 그렇게했던 것이 아닙니다.
  • 원래 배포 매니페스트에 서명하는 데 사용한 인증서가 만료되고 새로운 인증서가 발행되면 상처의 세계를 위해 있습니다 (고객은 모두 제거하고 재설을해야합니다). 세부 말의 입에 있습니다.

대부분의 문제가 해결되었지만 몇몇 사람들은 데스크탑 단축키를 만들 수 없다고 언급했습니다. 사실, 당신 ~할 수 있다 Visual Studio 2008 SP1로 데스크탑 단축키를 만듭니다.

또한 최신 버전의 Visual Studio를 사용하지 않으면 항상 설치된 시작 메뉴 바로 가기에 바로 가기를 만드는 코드 작성.

우리는 ClickOnce 앱으로 배포 할 앱을 가지고있었습니다. 우리는 사용자가 설치에서 일부 설정을 수정할 수 있어야했습니다 (예 : 배포 경로 - 빌드 시간에 알려지지 않은 네트워크 공유에서 파일을 제공하려고합니다). 배포의 파일을 변경하면 모든 해시를 다시 계산하고 모든 것을 다시 서명해야합니다. 따라서이 솔루션이 내부 인 경우 서명 인증서를 통과하는 데 문제가 없을 수도 있지만이 문제가 클라이언트를위한 경우이 문제를 우회하기 위해 멋진 솔루션을 건축해야합니다.

나는 Internets의 장 안에있는 어딘가에서 미래 버전의 Clickonce 가이 두통의 일부를 제거 할 것이라는 럼블 링을 들었습니다.

ClickOnce 배포 된 응용 프로그램을 조용히 제거 할 수 없습니다. 또한 시작 단축키에 매개 변수를 추가하는 것은 불가능하다고 생각합니다.

Clickonce의 함정 중 하나는 당신이 GAC. DLL 파일을 공유하는 여러 응용 프로그램을 설치하려는 경우 문제가됩니다. 각 응용 프로그램에는 DLL 파일의 로컬 사본이 필요합니다. 또한 여러 사용자 설치가 나왔습니다. 보다 창 설치 프로그램을 ClickOnce와 비교하는 목록.

누군가가 검색에서 이것을 언급하는 경우, 우리는 보안 부족에 관심이있는 많은 고객들이 응용 프로그램을 '배포'합니다. 응용 프로그램은 업데이트를 확인할 수 있도록 인증없이 공개 위치에서 제공되어야합니다. 유일한 예외는 Windows NT 인증이있는 경우입니다. 제 생각에는 Clickonce 응용 프로그램 보안 내가 의미하는 바를 설명합니다.

데스크탑 아이콘 3.5 SP1, 구운 - 그래서 그것은 더 이상 문제가되지 않습니다.

XMLSerializer에는 여전히 고정되지 않은 버그가 있습니다. 경우에 따라 제대로 배포되지 않습니다. 쉬운 해결 방법은이 파일을 배포에 수동으로 추가하는 것입니다. 피타이지만 충분히 쉽습니다 ... 배포가 갑자기 실패하면 충격을 줄 수 있습니다 ...

ClickOnce 응용 프로그램으로는 사용자의 데스크탑에 바로 가기를 설치하거나 응용 프로그램이 설치되는 곳에 Sayso가있는 것과 같이 많은 일이 있습니다. 어떤 사람들에게는 이것들은 거래자입니다.

또한 사용한 지 오래되었지만 클릭 버전/빌드 번호를 파악하고 표시하는 데 사용할 수있는 특별한 방법이 있습니다. 시도/캐치를 수행해야하며 ClickOnce 버전/빌드 번호가 예외를 던지면 응용 프로그램이 ClickOnce 배치 응용 프로그램으로 실행되지 않습니다 (즉, 정기적으로 컴파일 된 응용 프로그램 또는 Visual Studio에서 실행됩니다).

간단한 응용 프로그램의 경우 (즉, 마이크로 소프트 워드, 그러나 무언가를 할 수있는 빠른 신청서)) 많은 정기적 인 배포가 필요합니다. Clickonce는 훌륭합니다. 그러나 당신은 오히려 "Clickonce가 할 수 없습니다. MSI 또는 다른 것을 선택하십시오)의 벽을 빨리 쳤다.

일반 .NET 응용 프로그램보다 시스템 액세스가 적을 수 있습니다.

신뢰 수준이 낮아지기 때문입니다. 그것에 대해 더 많이 .NET Framework Developer 's Guide : ClickOnce 배포 및 보안.

그것의 가장 큰 문제는 해당 키에 액세스 할 수 없기 때문에 컴퓨터 키로 구성 파일의 섹션을 암호화 할 수 없다는 것입니다.

SP1이 데스크탑 아이콘을 만들 수 있다는 것을 몰랐습니다.
다음은 우리가 어떻게 수행했는지 (현재 "하드 웨이"라고도 함)는 다음과 같습니다.

try
{
    string company = string.Empty;
    string product = string.Empty;
    if (Attribute.IsDefined(asm, typeof(AssemblyCompanyAttribute)))
    {
        AssemblyCompanyAttribute asCompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyCompanyAttribute));
        company = asCompany.Company;
    }
    if (Attribute.IsDefined(asm, typeof(AssemblyProductAttribute)))
    {
        AssemblyProductAttribute asProduct = (AssemblyProductAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyProductAttribute));
        product = asProduct.Product;
    }
    if (!string.IsNullOrEmpty(company) && !string.IsNullOrEmpty(product))
    {
        string desktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            product + ".appref-ms");
        string shortcutPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
            Path.Combine(company, product + ".appref-ms"));
        File.Copy(shortcutPath, desktopPath, true);
    }
}
catch 
{
    // Shortcut could not be created
}

클라이언트가 인증이 필요한 프록시 뒤에있는 경우 설치할 수 없습니다.

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