Tag: clickonce

ClickOnce Manifest包含无效子项 – 但xml与旧发布的清单匹配

在我的应用上安装更新或全新安装ClickOnce发布时出错。 这种情况发生在未安装应用程序的计算机上以及已安装应用程序的计算机上。 我用于签署项目的pfx文件与以前的版本相同,所以我认为证书不是问题。 + Exception reading manifest from .exe.manifest: the manifest may not be valid or the file could not be opened. + The element ‘assembly’ in namespace ‘urn:schemas-microsoft-com:asm.v1’ has invalid child element ‘SignedInfo’ in namespace ‘http://www.w3.org/2000/09/xmldsig#’. List of possible elements expected: ‘dependency’ in namespace ‘urn:schemas-microsoft-com:asm.v1’ as well as ‘dependency’ in namespace ‘urn:schemas-microsoft-com:asm.v2’ as well […]

在64位窗口上运行x86包时,ClickOnce:BadImageFormatException

我的.NET 2.0应用程序导入非托管的32位dll。 当用户通过应用程序内的对话框打开文件时,将加载dll(第一次互操作调用)。 当我使用目标平台“Any”通过clickonce部署应用程序时,64位窗口上的用户在尝试从应用程序打开文件时(在加载非托管dll时)会收到BadImageFormatException。 我知道这是由于64位进程和32位非托管dll的不可比特的比特。 我使用x86作为目标平台重新部署了应用程序。 据我了解,这应该解决比特问题。 但 当我在64位系统上运行为x86构建的已部署应用程序时,我现在在应用程序启动之前立即获得BadImageFormatException。 至少测试了三台64位机器。 在32位机器上,它没有问题。 当我直接从VS运行应用程序时(或者不直接运行,只是正常构建,不通过ClickOnce),使用x86目标平台时64位窗口没有问题。 应用程序启动,用户可以加载文件 – 互操作调用成功。 我已经连续两天调试这个没有结果 – 我试过不同的电脑。 它似乎一直在我尝试的其中一台计算机上工作。 但是,我没有永久访问此计算机。 我已经设法在我的计算机上构建了一次ClickOnce部署,它可以在64位计算机上运行。 这可能只有100次尝试! 没有任何改变,唯一改变的变量是我在计算机重启后立即成功构建。 我做了很多次清理/重建/重启VS /重启Windows。 我重新安装了VS 2008,现在也是整个操作系统,它没有帮助。 编辑:我刚刚设法获得一个良好的构建(下一个100 🙂 :)并在部署的目录之间进行比较。 问题的根源是ClickOnce在主.exe的清单中生成错误的目标平台: <asmv1:assemblyIdentity name="app.exe" version="1.0.4.18" publicKeyToken=".token here." language="neutral" processorArchitecture="msil” type=”win32″ /> processorArchitecture应该是x86。 所以问题是如何在部署时一致地强制VS在清单中生成正确的processorArchitecture。 有人可以帮忙吗?

SetProcessDpiAwareness没有效果

我一直在尝试在ClickOnce应用程序上禁用DPI感知。 我很快发现,无法在清单中指定它,因为ClickOnce不支持清单文件中的asm.v3。 我找到的下一个选项是调用新的Windows函数SetProcessDpiAwareness 。 根据这个教程, 在创建应用程序窗口之前调用SetProcessDpiAwareness。 这个教程, 您必须在任何Win32API调用之前调用SetProcessDpiAwareness 你必须尽早调用这个函数。 所以,为了测试,我创建了一个完全空白的WPF应用程序,并将其作为我的整个App类: [DllImport(“SHCore.dll”, SetLastError = true)] private static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness); [DllImport(“SHCore.dll”, SetLastError = true)] private static extern void GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS awareness); private enum PROCESS_DPI_AWARENESS { Process_DPI_Unaware = 0, Process_System_DPI_Aware = 1, Process_Per_Monitor_DPI_Aware = 2 } static App() { var result = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware); var […]

Click-once应用程序如何确定其应用程序标识?

我有一个单击一次的应用程序,它已正确签名,正确配置并自行安装,没有任何问题。 它设置为脱机运行,但是从特定URL安装,如果我下载并运行setup.exe,它将安装更新。 所以,它基本上都在工作……除了我不能打印版本号,或从代码中触发更新。 如果我尝试,我会感到害怕:“应用程序标识未设置。” 2017-01-10 13:43:14.8367 ERROR System.Deployment.Application.InvalidDeploymentException: Application identity is not set. at System.Deployment.Application.ApplicationDeployment.get_CurrentDeployment() at LibDataAgent.Internal.Services.UpdateService.Deployment() System.Deployment.Application.InvalidDeploymentException: Application identity is not set. at System.Deployment.Application.ApplicationDeployment.get_CurrentDeployment() at LibDataAgent.Internal.Services.UpdateService.Deployment() 我没有在调试模式下运行,也没有使用调试版本。 所以这是我的实际问题: System.Deployment.Application中的click-once代码在运行时如何确定应用程序标识是什么? 所以,围绕这个还有很多其他问题,但请不要将其作为副本关闭,据我所知,它不是一个。 以下列出了我不想要的答案: 如何签署 click-one应用程序。 如何在构建时设置应用程序标识。 如何查找单击一次应用程序的安装位置。 如何在调试时使单击一次应用程序工作。 如何使用ApplicationDeployment检查更新。 非常简单地说,一次性点击应用程序在运行时确实执行了什么, 以确定应用程序标识。 救命! 笔记 我(迄今为止没有结果)尝试解决这个问题已经产生了这些注释: 我确信这与应用程序的启动方式有关,因为从命令行执行应用程序从未使用过click-once; 但是从开始菜单执行相同的应用程序将正确返回IsNetworkDeployed为true。 但是,我无法确定技术差异是什么,或者为什么人们正确检测到安装,而不是。 (或者实际上,为什么这个特定的应用程序不能从开始菜单起作用,当其他人没有明显的区别时)。 我试过的事情没有任何区别包括: 应用程序的工作目录。 直接或通过shell启动应用程序.exe 从新的快捷方式启动应用程序 进入开始菜单的’MyApplication.appref-ms’有一些神奇之处; appref-ms只是安装路径的URL: http://s3-ap-southeast-1.amazonaws.com/blahblah/Dev/MyApplication.application#MyApplication.application, Culture=neutral, […]

无法在Visual Studio 2015中安装使用ClickOnce部署的应用程序(stdole.dll)

应用程序在.net 4.5中运行,在VS 2012中使用ClickOnce构建和部署。在构建和部署相同的应用程序时,如果不更改VS 2015中的任何设置,我无法在客户端安装它? 得到以下错误: “强名称签名对此程序集stdole.dll无效” 当我从部署安装中排除stdole.dll时没问题。 我的问题是:如何在包含stdole.dll的VS2015中部署应用程序?

自动更新Compact Framework应用程序代码

我已经构建了一个Compact Framework应用程序供交付驱动程序使用。 它在SQL CE数据库上运行,并连接到Web服务器上的WCF服务。 我发布新版本时需要一种更新系统的方法。 我希望我可以在Web服务器上的新文件夹中安装新版本的WCF代码,然后以某种方式触发移动设备更新本地CF应用程序并连接到新的WCF服务URL。 到目前为止,我发现了2个框架: WmAutoUpdate http://github.com/seboslaw/wmautoupdate AppToDate http://www.modaco.com/category/332/apptodate/ 以及Microsoft的一些旧示例代码: .NET Compact Framework示例:自动更新程序http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8FC47C2C-FC61-4D82-ABAE-F34DC1BFCD3F&displaylang=en 在我花费数小时调查这些选项之前,我希望得到其他人的一些提示。 不同框架和技术的优缺点是什么? 我已经阅读了关于这个主题的各种其他post,但他们没有包括对这些框架的评论。 干杯 标记

一键式应用程序从Windows窗体移动到WPF

我有一个Windows Forms应用程序,我最近在WPF中重写了,我需要将它发布给我的最终用户。 我希望能够让用户转到WPF应用程序的ClickOnce安装点并删除他们的Windows窗体应用程序,因此他们的计算机上没有这两个应用程序。 完成此任务的最佳方式(阅读:最简单的用户)是什么? 我曾考虑创建一个先决条件命令行来检测旧版本和卸载,但我想避免编写类似于只运行一次的内容。

启动脱机ClickOnce应用程序并等待退出

我已经部署了ClickOnce Windows窗体应用程序(App A) 另一个应用程序(App B)以文件名作为参数启动App A. 我使用此代码执行此操作 var basePath = Environment.GetFolderPath(Environment.SpecialFolder.Programs); var location = String.Format(@”{0}\{1}\{2}\{3}”, basePath, “MyCompany”, “MyProduct”, “MyApp.appref-ms”); var fileName = @”c:\temp\somefile.ext”; var uri = new Uri(fileName).ToString(); Process.Start(location, uri); App A从AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]获取文件名并显示内容。 这就像一个魅力。 但是,现在我希望App B等待App A退出。 但是对Process.WaitForExit()的调用会立即返回。 有没有办法打开ClickOnce应用程序并等待它退出? 如果有必要,我可以更改应用程序的运行方式,但要求是我需要将应用程序作为ClickOnce应用程序运行(我知道在我的用户配置文件AppData\Local\Apps\2.0\文件夹中的某个地方存在exe并且可以直接启动但是如果我这样做,则ApplicationDeployment.IsNetworkDeployed为false且ApplicationDeployment.CurrentDeployment为null。在此我松开了ClickOnce更新function)。

使用ClickOnce和信任证书进行WPF应用程序部署

我已将使用测试证书的WPF应用程序部署到生产中。 现在,我必须更改测试证书并购买新证书。 我已经通过MSDN网站,我无法完成该怎么做? 所以,我需要澄清以下内容 在哪里购买这些证书文件以及它是什么类型的证书? 我们是否必须在客户端系统上安装这些证书? 这个证书的格式是什么? PFX? 如果我使用受信任的证书再次部署,它将导致更新已通过测试证书部署的应用程序的任何问题? 提前致谢

强制应用程序具有管理员权限

我需要授予我的应用程序管理员权限,因为它知道它将从用户会话而不是管理员帐户运行。 我看过其他网站,但找不到任何有用的东西。 我尝试编辑清单和其他东西,并插入了行: 尝试使用ClickOnce发布时,这给了我一个错误,但在我调试时却没有。 你能帮助我吗?