Créer des applications ClickOnce pour d’autres personnes à déployerCreate ClickOnce applications for others to deploy

Pas tous les développeurs qui créent des déploiements ClickOnce plan déployer les applications elles-mêmes.Not all developers who are creating ClickOnce deployments plan to deploy the applications themselves. Bon nombre d'entre eux simplement empaqueter leur application à l’aide de ClickOnce et ensuite remettre les fichiers à un client, par exemple une grande entreprise.Many of them just package their application by using ClickOnce and then hand the files off to a customer, such as a large corporation. Le client est alors chargé d’héberger l’application sur son réseau.The customer becomes the one responsible for hosting the application on its network. Cette rubrique décrit certains des problèmes inhérents à ces déploiements dans les versions du .NET Framework antérieures à la version 3.5.This topic discusses some of the problems inherent in such deployments in versions of the .NET Framework prior to version 3.5. Elle décrit ensuite une nouvelle solution fournie dans le .NET Framework 3.5 à l’aide de la nouvelle fonctionnalité « utiliser le manifeste pour approbation ».It then describes a new solution provided by using the new "use manifest for trust" feature in the .NET Framework 3.5. Enfin, elle présente les stratégies recommandées pour la création de déploiements de ClickOnce pour les clients qui utilisent encore des versions antérieures du .NET Framework.Finally, it concludes with recommended strategies for creating ClickOnce deployments for customers who are still using older versions of the .NET Framework.

Problèmes liés à la création de déploiements pour les clientsIssues involved in creating deployments for customers

Plusieurs problèmes se produisent lorsque vous envisagez de fournir un déploiement à un client.Several issues occur when you plan to supply a deployment to a customer. Le premier problème concerne la signature de code.The first issue concerns code signing. Pour être déployés sur un réseau, le manifeste de déploiement et le manifeste d’application d’un déploiement ClickOnce doivent être signés avec un certificat numérique.In order to be deployed across a network, the deployment manifest and application manifest of a ClickOnce deployment must both be signed with a digital certificate. Cela soulève la question de s’il faut utiliser le certificat du développeur ou celui du client lors de la signature des manifestes.This raises the question of whether to use the developer's certificate or the customer's certificate when signing the manifests.

La question de certificat à utiliser est critique, comme l’identité d’une application ClickOnce est basée sur la signature numérique du manifeste de déploiement.The question of which certificate to use is critical, as a ClickOnce application's identity is based on the digital signature of the deployment manifest. Si le développeur signe le manifeste de déploiement, il peut provoquer des conflits si le client est une grande entreprise, et plus d’une division de l’entreprise déploie une version personnalisée de l’application.If the developer signs the deployment manifest, it could lead to conflicts if the customer is a large company, and more than one division of the company deploys a customized version of the application.

Par exemple, supposons que Adventure Works a un service financier et un service des ressources humaines.For example, say that Adventure Works has a finance department and a human resources department. Les deux services de licence une application ClickOnce à partir de Microsoft Corporation qui génère des rapports à partir des données stockées dans une base de données SQL.Both departments license a ClickOnce application from Microsoft Corporation that generates reports from data stored in a SQL database. Microsoft fournit à chaque service avec une version de l’application qui est adaptée à leurs données.Microsoft supplies each department with a version of the application that is customized for their data. Si les applications sont signées avec le même certificat Authenticode, un utilisateur qui tente d’utiliser les deux applications, une erreur, ClickOnce considérant que la deuxième application comme étant identique à la première.If the applications are signed with the same Authenticode certificate, a user who tries to use both applications would encounter an error, as ClickOnce would regard the second application as being identical to the first. Dans ce cas, le client peut rencontrer des effets secondaires inattendus et indésirables qui incluent la perte de toutes les données stockées localement par l’application.In this case, the customer could experience unpredictable and unwanted side effects that include the loss of any data stored locally by the application.

Un autre problème lié à la signature du code est le deploymentProvider élément dans le manifeste de déploiement, ce qui indique à ClickOnce où rechercher les mises à jour de l’application.An additional problem related to code signing is the deploymentProvider element in the deployment manifest, which tells ClickOnce where to look for application updates. Cet élément doit être ajouté au manifeste de déploiement avant la signature.This element must be added to the deployment manifest prior to signing it. Si cet élément est ajouté par la suite, le manifeste de déploiement doit être signé à nouveau.If this element is added afterward, the deployment manifest must be re-signed.

Exigent que le client signer le manifeste de déploiementRequire the customer to sign the deployment manifest

Une solution à ce problème de déploiements non unique consiste à avoir le signe de développeur le manifeste d’application et le client signer le manifeste de déploiement.One solution to this problem of non-unique deployments is to have the developer sign the application manifest, and the customer sign the deployment manifest. Bien que cette approche fonctionne, il présente d’autres problèmes.While this approach works, it introduces other issues. Dans la mesure où un certificat Authenticode doive rester protégé, le client ne peut pas donner simplement le certificat au développeur de signer le déploiement.Since an Authenticode certificate must remain a protected asset, the customer cannot just give the certificate to the developer to sign the deployment. Bien que les clients puissent signer le manifeste de déploiement eux-mêmes à l’aide des outils disponibles gratuitement avec le SDK .NET Framework, cela peut nécessiter des connaissances techniques que le client est en mesure de fournir.While the customer can sign the deployment manifest themselves by using tools freely available with the .NET Framework SDK, this may require more technical knowledge than the customer is willing or able to provide. Dans ce cas, le développeur crée généralement une application, site Web ou autre mécanisme par lequel le client peut envoyer leur version de l’application pour la signature.In such cases, the developer usually creates an application, Web site, or other mechanism through which the customer can submit their version of the application for signing.

L’impact du client de signature sur la sécurité des applications ClickOnceThe impact of customer signing on ClickOnce application security

Même si le développeur et le client accepte que le client doit signer le manifeste d’application, cela soulève des autres problèmes qui entourent l’identité d’application, en particulier car il s’applique à un déploiement d’applications approuvées.Even if the developer and the customer agree that the customer should sign the application manifest, this raises other issues that surround the application's identity, especially as it applies to trusted application deployment. (Pour plus d’informations sur cette fonctionnalité, consultez vue d’ensemble du déploiement d’application approuvé.) Supposons qu’Adventure Works souhaite configurer ses ordinateurs clients afin que n’importe quelle application fournie par Microsoft Corporation s’exécute avec une confiance totale.(For more information about this feature, see Trusted application deployment overview.) Say that Adventure Works wants to configure its client computers so that any application provided to them by Microsoft Corporation runs with full trust. Si Adventure Works signe le manifeste de déploiement, ClickOnce utilise signature de sécurité d’Adventure Work pour déterminer le niveau de confiance de l’application.If Adventure Works signs the deployment manifest, then ClickOnce will use Adventure Work's security signature to determine the trust level of the application.

Créer des déploiements de client à l’aide du manifeste d’application de confianceCreate customer deployments by using application manifest for trust

ClickOnce dans .NET Framework 3.5 contient une nouvelle fonctionnalité qui permet aux développeurs et aux clients une nouvelle solution pour le scénario de la façon dont les manifestes doivent être signés.ClickOnce in the .NET Framework 3.5 contains a new feature that gives developers and customers a new solution to the scenario of how the manifests should be signed. Le manifeste d’application ClickOnce prend en charge un nouvel élément nommé <useManifestForTrust> qui permet à un développeur d’indiquer que la signature numérique du manifeste d’application qui doit être utilisé pour les décisions d’approbation.The ClickOnce application manifest supports a new element named <useManifestForTrust> that enables a developer to signify that the digital signature of the application manifest is what should be used for making trust decisions. Le développeur utilise des outils d’empaquetage ClickOnce, tels que Mage.exe, MageUI.exeet Visual Studio, d’inclure cet élément dans le manifeste d’application, ainsi que d’incorporer à la fois leur nom de serveur de publication et le nom de l’application dans le manifeste.The developer uses ClickOnce packaging tools—such as Mage.exe, MageUI.exe, and Visual Studio—to include this element in the application manifest, as well as to embed both their Publisher name and the name of the application in the manifest.

Lorsque vous utilisez <useManifestForTrust>, le manifeste de déploiement n’a pas d’être signé avec un certificat Authenticode émis par une autorité de certification.When using <useManifestForTrust>, the deployment manifest does not have to be signed with an Authenticode certificate issued by a certification authority. Au lieu de cela, elle peut être signée avec ce que l'on appelle un certificat auto-signé.Instead, it can be signed with what is known as a self-signed certificate. Un certificat auto-signé est généré par le client ou le développeur à l’aide des outils de kit de développement logiciel .NET Framework standard et puis appliqué au manifeste de déploiement en utilisant les outils de déploiement ClickOnce standards.A self-signed certificate is generated by either the customer or the developer by using standard .NET Framework SDK tools, and then applied to the deployment manifest by using the standard ClickOnce deployment tools. Pour plus d’informations, consultez MakeCert.For more information, see MakeCert.

À l’aide d’un certificat auto-signé pour le manifeste de déploiement présente plusieurs avantages.Using a self-signed certificate for the deployment manifest presents several advantages. En éliminant la nécessité pour le client obtenir ou créer leur propre certificat Authenticode, <useManifestForTrust> simplifie le déploiement du client, tout en permettant au développeur de conserver son identité de personnalisation sur l’application.By eliminating the need for the customer to obtain or create their own Authenticode certificate, <useManifestForTrust> simplifies deployment for the customer, while allowing the developer to maintain their own branding identity on the application. Le résultat est un ensemble de déploiements signés qui sont plus sûres et ont des identités d’application uniques.The result is a set of signed deployments that are more secure and have unique application identities. Cela élimine le conflit potentiel qui peut se produire à partir du déploiement de la même application à plusieurs clients.This eliminates the potential conflict that may occur from deploying the same application to multiple customers.

Pour obtenir des informations détaillées sur la création d’un déploiement de ClickOnce avec <useManifestForTrust> activé, consultez procédure pas à pas : déployer manuellement une application ClickOnce qui ne nécessite pas de nouvelle signature et qui conserve les informations de personnalisation.For step-by-step information about how to create a ClickOnce deployment with <useManifestForTrust> enabled, see Walkthrough: Manually deploy a ClickOnce application that does not require re-signing and that preserves branding information.

Fonctionne du manifeste d’application pour approbation lors de l’exécutionHow application manifest for trust works at runtime

Pour obtenir une meilleure compréhension du fonctionne de l’aide le manifeste d’application pour approbation lors de l’exécution, prenons l’exemple suivant.To get a better understanding of how using the application manifest for trust works at runtime, consider the following example. Une application ClickOnce qui cible le .NET Framework 3.5 est créée par Microsoft.A ClickOnce application that targets the .NET Framework 3.5 is created by Microsoft. Le manifeste d’application utilise le <useManifestForTrust> élément et est signé par Microsoft.The application manifest uses the <useManifestForTrust> element and is signed by Microsoft. Adventure Works signe le manifeste de déploiement à l’aide d’un certificat auto-signé.Adventure Works signs the deployment manifest by using a self-signed certificate. Adventure Works les clients sont configurés pour approuver toute application signée par Microsoft.Adventure Works clients are configured to trust any application signed by Microsoft.

Lorsqu’un utilisateur clique sur un lien vers le manifeste de déploiement, ClickOnce installe l’application sur l’ordinateur de l’utilisateur.When a user clicks a link to the deployment manifest, ClickOnce installs the application on the user's computer. Les informations de certificat et le déploiement identifier identifie de façon unique l’application ClickOnce sur l’ordinateur client.The certificate and deployment information identify the application uniquely to ClickOnce on the client computer. Si l’utilisateur tente d’installer la même application à nouveau à partir d’un emplacement différent, ClickOnce peut utiliser cette identité pour déterminer que l’application existe déjà sur le client.If the user tries to install the same application again from a different location, ClickOnce can use this identity to determine that the application already exists on the client.

Ensuite, ClickOnce examine le certificat Authenticode qui est utilisé pour signer le manifeste d’application, qui détermine le niveau de confiance accordé par ClickOnce.Next, ClickOnce examines the Authenticode certificate that is used to sign the application manifest, which determines the level of trust that ClickOnce will grant. Dans la mesure où Adventure Works a configuré ses clients pour approuver toute application signée par Microsoft, cette application ClickOnce est confiance totale.Since Adventure Works has configured its clients to trust any application signed by Microsoft, this ClickOnce application is granted full trust. Pour plus d’informations, consultez vue d’ensemble du déploiement d’application approuvé.For more information, see Trusted application deployment overview.

Créer des déploiements de client pour les versions antérieuresCreate customer deployments for earlier versions

Que se passe-t-il si un développeur déploie des applications ClickOnce pour les clients qui utilisent des versions antérieures du .NET Framework ?What if a developer is deploying ClickOnce applications to customers who are using older versions of the .NET Framework? Les sections suivantes résument plusieurs solutions recommandées, ainsi que les avantages et les inconvénients de chacun d’eux.The following sections summarize several recommended solutions, together with the benefits and drawbacks of each.

Déploiements de connexion pour le compte clientSign deployments on behalf of customer

Une stratégie de déploiement est destiné aux développeurs de créer un mécanisme pour signer les déploiements pour le compte de leurs clients, à l’aide de la clé privée du client.One possible deployment strategy is for the developer to create a mechanism to sign deployments on behalf of their customers, by using the customer's own private key. Cela empêche le développeur d’avoir à gérer les clés privées ou plusieurs packages de déploiement.This prevents the developer from having to manage private keys or multiple deployment packages. Le développeur fournit simplement le même déploiement à chaque client.The developer just provides the same deployment to each customer. Il incombe au client personnaliser en fonction de leur environnement en utilisant le service de signature.It is up to the customer to customize it for their environment by using the signing service.

L’inconvénient de cette méthode est le temps et les dépenses sont requis pour son implémentation.One drawback to this method is the time and expense that are required to implement it. Bien que ce service peut être généré en utilisant les outils fournis dans le SDK .NET Framework, il ajoute plus de temps de développement pour le cycle de vie du produit.While such a service can be built by using the tools provided in the .NET Framework SDK, it will add more development time to the product life cycle.

Comme indiqué plus haut dans cette rubrique, un autre inconvénient est que la version de chaque client de l’application aura la même identité d’application, ce qui peut provoquer des conflits.As noted earlier in this topic, another drawback is that each customer's version of the application will have the same application identity, which could lead to conflicts. S’il s’agit d’un problème, le développeur peut modifier le champ de nom qui est utilisé lors de la génération du manifeste de déploiement pour donner à chaque application un nom unique.If this is a concern, the developer can change the Name field that is used when generating the deployment manifest to give each application a unique name. Cela crée une identité distincte pour chaque version de l’application et supprimer les éventuels conflits d’identité.This will create a separate identity for each version of the application, and eliminate any potential identity conflicts. Ce champ correspond à la -Name argument pour Mage.exe et pour le nom champ sur le nom onglet de MageUI.exe.This field corresponds to the -Name argument for Mage.exe, and to the Name field on the Name tab in MageUI.exe.

Par exemple, que le développeur a créé une application nommée Application1.For example, say that the developer has created an application named Application1. Au lieu de créer un déploiement unique avec le champ de nom défini sur Application1, le développeur peut créer plusieurs déploiements avec une variation spécifique du client sur ce nom, tel que Application1-ClientA, Application1-client b et ainsi de suite.Instead of creating a single deployment with the Name field set to Application1, the developer can create several deployments with a customer-specific variation on this name, such as Application1-CustomerA, Application1-CustomerB, and so on.

Déployer à l’aide d’un package d’installationDeploy using a setup package

Une deuxième stratégie de déploiement consiste à générer un projet Microsoft Setup pour effectuer le déploiement initial de l’application ClickOnce.A second possible deployment strategy is to generate a Microsoft Setup project to perform the initial deployment of the ClickOnce application. Cela peut être fourni dans un des formats suivants : déploiement MSI, fichier exécutable d’installation (. (EXE), ou dans un fichier CAB (.cab) avec un script de commandes.This can be provided in one of several different formats: as an MSI deployment, as a setup executable (.EXE), or as a cabinet (.cab) file together with a batch script.

À l’aide de cette technique, le développeur fournit au client un déploiement qui inclut les fichiers d’application, le manifeste d’application et un manifeste de déploiement qui sert de modèle.Using this technique, the developer would provide the customer a deployment that includes the application files, the application manifest, and a deployment manifest that serves as a template. Le client exécute le programme d’installation, qui vous invite à entrer une URL de déploiement (serveur ou fichier partager l’emplacement à partir duquel les utilisateurs installent l’application ClickOnce), ainsi que d’un certificat numérique.The customer would run the setup program, which would prompt them for a deployment URL (the server or file share location from which users will install the ClickOnce application), as well as a digital certificate. L’application d’installation peut également demander pour les autres options de configuration de ClickOnce, telles que de l’intervalle de vérification de mise à jour.The setup application may also choose to prompt for additional ClickOnce configuration options, such as update check interval. Une fois que ces informations sont collectées, le programme d’installation voulez-vous générer le manifeste de déploiement réel, signez-le et publier l’application ClickOnce à l’emplacement de serveur désigné.Once this information is gathered, the setup program would generate the real deployment manifest, sign it, and publish the ClickOnce application to the designated server location.

Il existe trois façons que les clients puissent signer le manifeste de déploiement dans cette situation :There are three ways that the customer can sign the deployment manifest in this situation:

  1. Le client peut utiliser un certificat valide émis par une autorité de certification (CA).The customer can use a valid certificate issued by a certification authority (CA).

  2. Une variante de cette approche, le client peut choisir signer le manifeste de déploiement avec un certificat auto-signé.As a variation on this approach, the customer can choose to sign their deployment manifest with a self-signed certificate. L’inconvénient de cette approche est qu’elle entraîne l’application afficher les mots « Éditeur inconnu » lorsque l’utilisateur est invité s’il faut l’installer.The drawback to this is that it will cause the application to display the words "Unknown Publisher" when the user is asked whether to install it. Toutefois, l’avantage est qu’il empêche les clients plus petits de devoir dépenser du temps et l’argent nécessaire pour un certificat émis par une autorité de certification.However, the benefit is that it prevents smaller customers from having to spend the time and money required for a certificate issued by a certification authority.

  3. Enfin, le développeur peut inclure son propre certificat auto-signé dans le package d’installation.Finally, the developer can include their own self-signed certificate in the setup package. Cela introduit des problèmes potentiels avec l’identité d’application décrit précédemment dans cette rubrique.This introduces the potential problems with application identity discussed earlier in this topic.

    L’inconvénient de la méthode de projet de déploiement d’installation est le temps et les dépenses nécessaires pour générer une application de déploiement personnalisé.The drawback to the setup deployment project method is the time and expense required to build a custom deployment application.

Aucun client a générer le manifeste de déploiementHave customer generate deployment manifest

Une troisième stratégie de déploiement est de rendre hors tension de l’application uniquement les fichiers et manifeste d’application au client.A third possible deployment strategy is to hand off only the application files and application manifest to the customer. Dans ce scénario, le client est responsable de l’utilisation du SDK .NET Framework pour générer et signer le manifeste de déploiement.In this scenario, the customer is responsible for using the .NET Framework SDK to generate and sign the deployment manifest.

L’inconvénient de cette méthode est qu’il nécessite le client pour installer les outils du Kit de développement logiciel .NET Framework et pour qu’un développeur ou un administrateur système qui est de maîtriser parfaitement.The drawback of this method is that it requires the customer to install the .NET Framework SDK tools, and to have a developer or system administrator who is skilled at using them. Certains clients peuvent rechercher une solution nécessitant peu ou aucune connaissance technique de leur part.Some customers may demand a solution that requires little or no technical effort on their part.

Voir aussiSee also

Déployer des applications ClickOnce pour les serveurs de test et de production sans nouvelle signature Deploy ClickOnce applications for testing and production servers without resigning
Procédure pas à pas : Déploiement manuel d’une application ClickOnce Walkthrough: Manually deploying a ClickOnce application
Procédure pas à pas : Déploiement manuel d’une application ClickOnce qui ne nécessite pas de nouvelle signature et qui conserve les informations de personnalisationWalkthrough: Manually deploying a ClickOnce application that does not require re-signing and that preserves branding information