我有一项需要在客户机上部署的服务。
目标机器是64位。我的开发机器也是64位。 该应用程序非常简单,侦听端口并执行一些数据库操作。它的目标是.net 3.5
当我部署Anycpu,X64或X86版本时,该东西将不会安装在客户端计算机上。
我检查了dependencywalker,它列出了: devmgr.dll ieshims.dll wer.dll
无论如何......我在客户端机器上安装了visual studio 2008 ...查看所有来源。我不改变一件事并编译。将exe复制到它的dest位置......你知道什么......它可以工作。
Dependencywalker仍然列出了相同的依赖性问题。
在这台机器上编译它的行为怎么能给我一个不同的exe?
编辑: 当我说它没有安装。我的意思是installUtil会出错:
安装阶段发生异常。 System.InvalidOperationException:无法在C:\ services中获取安装程序类型 \ incomingnotifications \ IncomingNotifications.exe程序集。 在System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly() 在System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt 吃了) 在System.Configuration.Install.Installer.Install(IDictionary stateSaver) 在System.Configuration.Install.TransactedInstaller.Install中(IDictionary已保存 州) 抛出了内部异常System.Reflection.ReflectionTypeLoadException h以下错误消息:无法加载一个或多个请求的类型 。检索LoaderExceptions属性以获取更多信息。 在System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) 在System.Reflection.Module.GetTypes() 在System.Configuration.Install.AssemblyInstaller.GetInstallerTypes(汇编 ASSEM) 在System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly()
还...在使用visual studio进行编译之前,我检查过该服务仍然无法安装。编译完成后就可以了。
EDIT2: 在devmachine上再次编译并发送二进制文件会导致相同的错误。在本地编译给我一个有效的exe
答案 0 :(得分:1)
目前还不是很清楚你的问题究竟是什么,因为你说它不会安装在机器上。你什么意思?安装失败?或者你只是将它复制并尝试运行它?你收到任何错误信息吗?
你安装了这项服务吗?或者这是作为构建的一部分完成的吗?这可能解释了为什么将它复制到机器上不起作用但是构建它确实...一旦你在新机器上安装了VS,在dev机器上编译的exe是否有效?
我会首先检查你的目标机器上是否有正确的.net版本,因为安装VS会把它放在那里,如果不是的话。
我会使用像procmon这样的工具来查看服务启动时会发生什么,以检查它是不是缺少一些dll。
更多信息可能有助于更快地得到答案......
编辑:
在您编辑后,我做了一些谷歌搜索并遇到了this thread这提出了一些选项,但主要的一个似乎治愈了一些(假设你没有依赖,不能要解决的问题是你没有以管理员身份运行install util:
引用帖子:
您正在遇到'标准用户'。我猜你可能是在一个本地管理员组成员的帐户下运行,但启用了Vista UAC,即使管理员以标准用户身份运行,直到他们运行一个发出明确管理请求的应用程序 - 此时你通常获得管理员提升提示。 InstallUtil.exe未标记为明确要求admin,因此失败。
创建运行InstallUtil youService.exe的cmd脚本,并将脚本设置为require admin或执行'runas / user:Administrator cmd.exe'并从那里运行InstallUtil。
如果这不是问题,那么另一个人建议:
我发现安装在32位框架中使用InstallUtil.exe时有效,但在64位框架中运行InstallUtil.exe时会生成System.Reflection.ReflectionTypeLoadException。这是我需要在我的项目中设置的设置还是我包含的64位不支持的结构? (虽然我认为它向后兼容)。
不确定这些中的任何一个是否会有所帮助,但您永远不会知道...
答案 1 :(得分:0)
从.NET Framework 2.0版开始,32位版本的公共语言运行库(CLR)继续只附带32位版本的Installer工具,但64位版本的CLR发布同时使用32位和64位版本的Installer工具。使用64位CLR时,使用32位安装程序工具安装32位程序集,使用64位安装程序工具安装64位和Microsoft中间语言程序集。否则,两个版本的Installer工具的行为都相同。
答案 2 :(得分:0)
不要使用Framework 64文件夹中的installutil。使用常规的Framework文件夹。尽管你在64台计算机上运行它,它应该可以在那里工作。