iis .net托管捆绑修复

axzmvihb  于 2023-06-23  发布在  .NET
关注(0)|答案(2)|浏览(126)

我做了wpf(c#)应用程序,安装我的一些应用程序到windows,我有问题与webapp时,运行。net托管捆绑修复。
我的安装程序这样做,除其他事项外:
1.安装.net主机包7.0.5
1.安装IIS
1.将应用程序文件复制到c:/inetpub/MyApp
1.将该文件夹的权限授予IIS_IUSRS和DefaultAppPool
1.创建iis网站localhost:8888
1.修复.net托管包(这一步是必要的,因为我得到错误“HTTP错误500.19 -内部服务器错误”,如果我不这样做与c#进程或手动)
1.重新启动IIS
如果我没有安装主机包,这一切都像一个魅力,但问题发生时,我有主机包isntalled(在我的情况下7.0.5),我试图通过C#修复。我的应用程序只是关闭,我甚至不能得到错误的捕捉。
安装后(崩溃)我可以手动打开托管bundle .exe并单击修复,或者通过cmd进行修复,比我的网站在iis上的作品应该像IIS安装代码是:

string file = @"dism.exe";
            string arguments = $"/quiet /norestart /Online /Enable-Feature /FeatureName:IIS-WebServerRole /All";
            Process process = new Process();
            process.StartInfo.FileName = file;
            process.StartInfo.Arguments = arguments;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();
            process.WaitForExit();

我试过了

  • 以管理员身份运行
  • 在修复.net主机包并再次启动之前停止IIS
  • 使用process()执行修复
  • 使用cmd执行修复(在我的wpf(c#)应用程序中)
  • 还有这么多的组合

我的第一个代码(如果没有安装.net托管包,并且我的应用程序在创建iis站点之前进行安装)是这样的:

string file = @"./Source/dotnet-hosting-7.0.5-win.exe";
            string arguments = $"/repair /quiet /norestart";
            Process process = new Process();
            process.StartInfo.FileName = file;
            process.StartInfo.Arguments = arguments;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();
            process.WaitForExit();

我已经尝试添加超时

int timeoutMilliseconds = 10000;
  if (!process.WaitForExit(timeoutMilliseconds))

我还尝试给完整的路径。net托管捆绑。exe文件(即使它的工作时,托管捆绑没有安装之前,我的应用程序开始安装)
这也不起作用:

process.OutputDataReceived += (sender, e) =>
            {
                if (!string.IsNullOrWhiteSpace(e.Data))
                    Console.WriteLine(e.Data);
            };

            process.ErrorDataReceived += (sender, e) =>
            {
                if (!string.IsNullOrWhiteSpace(e.Data))
                    Console.WriteLine(e.Data);
            };

基本上,如果有.net托管捆绑安装之前,我的wpf应用程序是执行,修复不工作,我需要做的手动,如果我想我的iis网站的工作
顺便说一句,这是我在修复x1c 0d1x之前得到的错误
PS:我已经问了ChatGPT 100000个问题,在这种情况下没用

eivgtgni

eivgtgni1#

HTTP错误500.19 -内部服务器错误
错误代码:0x 8007000 d
无法访问请求的页,因为该页的相关配置数据无效。
出现此问题的原因是ApplicationHost.config或Web.config文件包含格式错误或未识别的XML元素。IIS无法识别未安装模块的XML元素。例如,IIS URL重写模块。例如:URL重写模块、ASP.NET Core模块、CORS模块。
从ApplicationHost.config或Web.config文件中删除格式错误的XML元素。检查未识别的XML元素,然后安装相关的IIS模块。你也可以参考Lex Li的这个article,也许对你有帮助。
相似线程:asp.net core web api published in IIS after moved to different IIS server pc gives error 500.19 (0x8007000d)

7vhp5slm

7vhp5slm2#

所以,我找到了解决方案,我注意到ApplicationHost.config没有元素

<add name="AspNetCoreModuleV2" image="%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll" />

我得到的结论是修复托管捆绑注册这个AspNetCoreModuleV2到IIS,我已经厌倦了许多不同的方法来安装这个模块与IIS安装,但无济于事,尝试给args到dism.exe像:

/quiet /norestart /online /enable-feature /featurename:IIS-WebServerRole /featurename:IIS-ASPNETCoreModuleV2

发生这种情况的原因是因为主机包已经安装之前IIS,因为修复不起作用(我的应用程序不断崩溃)我想只是安装“AspNetCoreModuleV2”后,我安装IIS
所以我在这个site上得到了我的.msi:
然后我就在iis之后安装了它,它修复了代码的问题

string msiPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Source" , "aspnetcoremodule_x64_en_v2.msi");
 process = new Process();
 process.StartInfo.FileName = "msiexec.exe";
 process.StartInfo.Arguments = $"/i \"{msiPath}\" /quiet /norestart";
 process.StartInfo.UseShellExecute = false;
 process.StartInfo.CreateNoWindow = true;
 process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
 process.Start();
 process.WaitForExit();

相关问题