Pergunta

Tenho vários .NET Windows Forms aplicações que estou preparando para converter em um ClickOnce cenário de implantação / smart-client. Eu li os tutoriais NÂO-este-grande, mas há armadilhas ou "pegadinhas" que eu deveria estar ciente de?

Existem várias aplicações menores utilizados e desligar, mas a principal aplicação é em C #, funciona 24/7, é bastante grande, mas apenas muda a cada poucas semanas. Ele também escreve para um arquivo de log locallly e fala com dispositivos de hardware locais.

Foi útil?

Solução

Aqui estão alguns que eu estou ciente de.

  1. Não é possível colocar um ícone na área de trabalho. Você pode agora.

  2. Não consigo instalar para todos os usuários.

  3. Eu preciso saltar através de aros para mover a implementação para um servidor diferente. Não é um problema se você estiver desenvolvendo internamente, e os usuários podem ver o servidor que você está publicando ou se você estiver implantando no web público, mas não é grande se você precisa rolar para fora para vários sites de clientes de forma independente.

  4. Desde .NET 3.5 SP1 não é necessário para assinar a implantação mais manifesto que o torna muito mais fácil para mover as implantações de novos servidores.

  5. Não consigo instalar assemblies no GAC . Você pode contornar isso criando instalar pacotes regulares que são pré-requisitos da aplicação ClickOnce.

Outras dicas

  • Quando as atualizações são implantadas, o built-in de diálogo para que apareça como se todo o aplicativo está sendo re-baixado. Na verdade, apenas as DLLs alterados estão sendo baixados, ea barra de progresso exibida é enganosa / errado. Não perca tempo tentando descobrir por que todas as igrejas estão sendo re-implantado apenas para descobrir que eles realmente não são. Não é que eu fiz isso ou nada.
  • Quando o certificado que você usou para assinar o manifesto de implantação original expirar e você é emitido um novo, você está em um mundo de dor (clientes serão todos necessidade de desinstalar e reinstalar). Detalhes estão em boca do cavalo.

A maioria das questões foram abordadas, mas várias pessoas mencionados não ser capaz de criar um atalho no desktop. Na verdade, você < em> pode criar um atalho no desktop com o Visual Studio 2008 SP1 .

Além disso, se você não estiver usando a versão mais recente do Visual Studio, você sempre pode escrever código para criar um atalho para o menu iniciar instalado atalho .

Nós tivemos um aplicativo que estávamos indo para implantar como um aplicativo ClickOnce. Precisávamos que o usuário seja capaz de modificar algumas configurações na instalação (como o caminho de implantação - IT quer servir os arquivos de seu compartilhamento de rede, não é conhecido em tempo de compilação). Quando você alterar qualquer um dos arquivos na sua implantação, é preciso recalcular todos os hashes, e re-assinar tudo. Assim, se esta solução é interno, você não pode ter problemas para passar em torno de uma cert assinatura, mas se isto é para clientes, você terá de arquitetar uma solução extravagante para ignorar esta questão.

Eu ouvi rumores de algum lugar dentro das entranhas dos internets que uma futura versão do ClickOnce irá remover alguns dos essa dor de cabeça.

Você não pode desinstalar silenciosamente ClickOnce aplicativos implantados. Também acho que é impossível adicionar parâmetros para o atalho de inicialização.

Uma das armadilhas com ClickOnce é o fato de que você não pode instalar a GAC . Este é um problema se você deseja instalar vários aplicativos que arquivos DLL ação. Cada aplicação vai exigir uma cópia local dos arquivos DLL. Além disso, várias instalações de usuários estão fora. Consulte a lista comparando janela do instalador de ClickOnce .

No caso de alguém se refere a isso em uma pesquisa, encontramos muitos clientes preocupados com a falta de segurança 'distribuir' a sua aplicação. O aplicativo deve estar disponível em um local público - sem qualquer autenticação - para que ela seja capaz de verificar se há atualizações. A única exceção é se você tiver a autenticação do Windows NT. Acho Applications Securing ClickOnce explica o que Quero dizer.

ícones da área de trabalho são bastante simples de se fazer por meio de código, e como mencionado, com 3.5 SP1 , cozido em -. modo que não é mais um problema

Há ainda um bug não fixada com o XmlSerializer - ele não é implantado corretamente em alguns casos. Uma solução fácil é adicionar manualmente este arquivo para a implantação. PITA, mas é bastante fácil ... Pode ser chocante quando a implantação de repente falhar embora ...

Há um monte de coisas que você não pode fazer com aplicativos ClickOnce, como instalar um atalho para o desktop do usuário ou ter qualquer SaySo em que o aplicativo é instalado. Para algumas pessoas estas são dealbreakers.

Além disso ele tem sido um tempo desde que eu usei, mas há uma maneira especial que você pode usar para descobrir e exibir o número da versão ClickOnce / build, que é separado do número da versão / build do aplicativo. Você tem que fazer um try / catch e se o número da versão ClickOnce / build lança uma exceção, em seguida, o aplicativo não está sendo executado como um aplicativo implantado-ClickOnce (isto é, ele está sendo executado como uma aplicação regular compilado ou a partir do Visual Studio).

Para uma aplicação que é simples (isto é, não Microsoft Word, mas sim um aplicação rápida e suja de fazer alguma coisa) e precisa de um monte de implantação regular, ClickOnce é grande. Mas você rapidamente bater na parede de "oh, isso não pode ser feito por ClickOnce, por favor escolha MSI ou outra coisa).

Você vai ter menos acesso ao sistema do que a sua aplicação normal .NET.

Isso é porque você vai ter um nível de confiança mais baixo. Mais sobre isso em .NET Framework Developer Guide: Implantação do ClickOnce e Segurança .

O meu maior problema com isso é que não é possível seções criptografar de seu arquivo de configuração com a chave do computador, porque você não tem o acesso a essa chave (quando você pensa sobre isso, faz sentido para proteger essa chave) .

Eu não sabia que o SP1 permitiu-lhe criar o ícone no desktop.
Veja como temos vindo a fazer isso (agora conhecido como "a maneira dura"):

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
}

Você não pode instalar se o cliente está atrás de um proxy que requer autenticação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top