NGEN显示返回在C#winforms中使用Process.Start()运行时,与高位CMD不同的结果

NGEN显示返回在C#winforms中使用Process.Start()运行时,与高位CMD不同的结果,第1张

概述NGEN显示返回在C#winforms中使用Process.Start()运行时,与高位CMD不同的结果

我一直在试图与我的同事一起解决这个问题。


我使用Ngen制作本机图像,并提升客户端上的应用程序性能。


让我们假设Exe文件名是Example.exe


我试图在应用程序中做的是,我做ngen安装example.exe,和ngen将安装本机图像的assebmlIEs


但是这是问题:


如果我尝试高架CMD并运行


C:windowsMicrosoft.NETFramework64v4.0.30319ngen display example.exe


将显示example.exe文件名和本机映像的版本,但是,使用以下在windows窗体c#中执行相同 *** 作的代码,它不显示example.exe文件的文件名和版本,并显示相反,如Telerik等。


所以我的问题是为什么CMD返回正确的结果,而进程返回依赖关系,而不是文件名和版本本身?


这里是我的一些代码:

public static bool Run() { var f = new Loading(); bool state = false; var b = new BackgrounDWorker(); string runtimeStr = RuntimeEnvironment.GetRuntimeDirectory(); string ngenStr = Path.Combine(runtimeStr,"ngen"); Process process = new Process { StartInfo = { filename = ngenStr,windowstyle = Processwindowstyle.HIDden,UseShellExecute = false,RedirectStandardOutput = true,RedirectStandardError = true,CreateNowindow = false } }; if (Environment.Osversion.Version.Major >= 6) { process.StartInfo.Verb = "runas"; } process.StartInfo.Arguments = "display " + Application.Productname; process.Start(); // process.WaitForExit(); string stdoutx = process.StandardOutput.ReadToEnd(); process.WaitForExit(); }

但是stdoutxstring不包含example.exe文件名或版本


编辑:什么应该是什么样的例子:


这是cmd返回哪个是正确的结果:

Example,Version=1.0.0.19,Culture=neutral,PublicKeyToken=null <deBUG>

这是什么:

Microsoft (R) CLR Native Image Generator - Version 4.6.79.0 copyright (c) Microsoft Corporation. All rights reserved. NGEN Roots: C:ProjectExamplebinDeBUGExample.EXE NGEN Roots that depend on "Example": C:ProjectExamplebinDeBUGExample.EXE Native Images: Klik.windows.Forms.Entrylib.V2.2008,Version=2.0.0.0,PublicKeyToken=null Microsoft.CSharp,Version=4.0.0.0,PublicKeyToken=b03f5f7f11d50a3a Microsoft.CSharp,PublicKeyToken=b03f5f7f11d50a3a ncalc,Version=1.3.8.0,PublicKeyToken=973cde3f1cafed03 Newtonsoft.Json,Version=6.0.0.0,PublicKeyToken=30ad4fe6b2a6aeed Newtonsoft.Json,PublicKeyToken=30ad4fe6b2a6aeed RedGate.Migrations.Core,Version=1.0.0.1401,PublicKeyToken=7f465a1c156d4d57 <deBUG> RedGate.Shared.ComparisonInterfaces,Version=1.0.2.278,PublicKeyToken=7f465a1c156d4d57 RedGate.Shared.sql,Version=9.9.0.0,PublicKeyToken=7f465a1c156d4d57 RedGate.Shared.Utils,PublicKeyToken=7f465a1c156d4d57 RedGate.soCCompareInterface,Version=3.0.50.59,PublicKeyToken=7f465a1c156d4d57 RedGate.sqlCompare.ASTParser,Version=11.0.0.414,PublicKeyToken=7f465a1c156d4d57 RedGate.sqlCompare.Engine,Version=11.1.0.2,PublicKeyToken=7f465a1c156d4d57 <deBUG> RedGate.sqlCompare.Rewriter,PublicKeyToken=7f465a1c156d4d57 System.Configuration.Install,PublicKeyToken=b03f5f7f11d50a3a System.Data.DataSetExtensions,PublicKeyToken=b77a5c561934e089 System.Data,PublicKeyToken=b77a5c561934e089 System.Data.linq,PublicKeyToken=b77a5c561934e089 System.Data.sqlite,Version=1.0.85.0,PublicKeyToken=db937bc2d44ff139 System.Deployment,PublicKeyToken=b03f5f7f11d50a3a System,PublicKeyToken=b77a5c561934e089 System.Drawing,PublicKeyToken=b03f5f7f11d50a3a System.Management,PublicKeyToken=b03f5f7f11d50a3a System.Runtime.Serialization,PublicKeyToken=b77a5c561934e089 System.ServiceModel,PublicKeyToken=b77a5c561934e089 System.Threading,Version=1.0.2856.102,PublicKeyToken=31bf3856ad364e35 System.Web,PublicKeyToken=b03f5f7f11d50a3a System.Web,PublicKeyToken=b03f5f7f11d50a3a System.windows.Forms,PublicKeyToken=b77a5c561934e089 System.Xml,PublicKeyToken=b77a5c561934e089 System.Xml.linq,PublicKeyToken=b77a5c561934e089 Telerik.Reporting,Version=9.0.15.324,PublicKeyToken=a9d7983dfcc261be Telerik.ReportVIEwer.WinForms,PublicKeyToken=a9d7983dfcc261be Telerik.WinControls.ChartVIEw,Version=2015.1.331.40,PublicKeyToken=5bb2a467cbec794e Telerik.WinControls,PublicKeyToken=5bb2a467cbec794e Telerik.WinControls.GrIDVIEw,PublicKeyToken=5bb2a467cbec794e Telerik.WinControls.themes.Office2010Black,PublicKeyToken=5bb2a467cbec794e Telerik.WinControls.themes.Office2010Silver,PublicKeyToken=5bb2a467cbec794e

什么USB设备(友好名称)当前连接到PC?

发送消息到windows进程(而不是它的主窗口)

如何在.net或其他技术中呈现应用程序

如何为windows编写一个非常简单的本机应用程序(不需要.NET并通过安装过程)

API来创build一个新的调制解调器

跨进程事件 – 可靠地释放所有服务员

什么编程实践影响窗口句柄的数量?

C#在运行时或更早时间设置stream程描述

通过本地networking的URL调用子程序?

C#/。NET定时器和Win32睡眠function都是不精确的

是的,你没有正确地做到这一点。 您正在使用的命令的语法是:

ngen.exe display [assemblyname | assemblyPath]

请注意assemblyname和assemblyPath之间的区别。 当你从cmd.exe运行它时,你键入“example”。 因此指定了(部分)程序集名称。 在你的代码中,你使用了“example.exe”。 Environment.CurrentDirectory是正确设置的,是一个常见的意外。 所以Ngen.exe可以找到这个文件 ,它变得很健谈。 不仅列出程序集名称,还列出所有依赖项的本地映像。 像Klik.windows.Forms.Entrylib等等。

不是唯一的问题,请注意您指定了部分程序集名称。 你要确保你的程序集的特定版本是正版的。 使代码看起来像这样:

process.StartInfo.Arguments = "display "" + System.Reflection.Assembly.GetEntryAssembly().Fullname + """;

并用Project> PropertIEs> DeBUG选项卡>测试它,取消“启用Visual Studio宿主进程”复选框。

次要的烦恼是本地图像(x86与x64)的差距,让您的应用程序升高,以便您可以安装原生图像,通常只有在您的应用程序安装完成时才会出现。

总结

以上是内存溢出为你收集整理的NGEN显示返回在C#winforms中使用Process.Start()运行时,与高位CMD不同的结果全部内容,希望文章能够帮你解决NGEN显示返回在C#winforms中使用Process.Start()运行时,与高位CMD不同的结果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存