Casper-SC
@Casper-SC
.NET программист

ASP.NET Core 3.1 + IIS + Powershell SDK не работают команды Powershell, если веб-приложение запущено из IIS. Как исправить?

Просьба не трогать теги, которые я поставил. Я не знаю в какой ветке найдётся тот, у кого возникала эта проблема и все теги правильно выставлены. В вопросе затрагивается всё, что указано в тегах. Например, вдруг в IIS нужно что-то настроить или в ASP.NET Core, что-то связанное с IIS.

Когда запускаю приложение из под дебага или просто дабл кликом на эксешнике, то PowerShell нормально работает, выполняются команды в нём и т.д. После того как публикую приложение, то PowerShell как-будто зависает. Отправляю запрос и нет никакой реакции. Postman очень долго ждёт ответ. Как найти причину проблемы, если нет даже ошибки? Возможно, где-то есть полезные логи? Кто-то сталкивался с подобным?

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>***</UserSecretsId>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <LangVersion>9</LangVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Extensions.Hosting.AsyncInitialization" Version="1.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.15" />
    <PackageReference Include="Microsoft.Data.Sqlite" Version="5.0.6" />
    <PackageReference Include="Microsoft.Management.Infrastructure" Version="2.0.0" />
    <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.0.6" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
    <PackageReference Include="Serilog.AspNetCore" Version="3.4.0" />
  </ItemGroup>

</Project>


public class Startup
    {
        public IConfiguration Configuration { get; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public void ConfigureServices(IServiceCollection services)
        {
            // ... 
            // Много всего, что не относится к вопросу
            // ... 

            // OutOfProcess
            services.Configure<IISOptions>(options =>
            {
                options.ForwardClientCertificate = false;
            });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // ... 
            // Много всего, что не относится к вопросу
            // ... 
        }
    }


Properties/PublishProfiles/FolderProfile.pubxml
RuntimeIdentifier win7-x64 используется, так как возникала проблема
.
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <DeleteExistingFiles>False</DeleteExistingFiles>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>x64</LastUsedPlatform>
    <PublishProvider>FileSystem</PublishProvider>
    <PublishUrl>bin\Release\netcoreapp3.1\publish\</PublishUrl>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish />
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
    <PublishSingleFile>False</PublishSingleFile>
    <ProjectGuid>***</ProjectGuid>
    <SelfContained>false</SelfContained>
    <PublishReadyToRun>False</PublishReadyToRun>
  </PropertyGroup>
</Project>


try
{
    using var powerShell = PowerShell.Create();
    // Логировал и знаю, что зависает после верхней строки.
    await powerShell
        .AddCommand("Start-Process")
        .AddArgument($"someclient://run-service/session={session}")
        .InvokeAsync();
}
catch (Exception ex)
{
    _logger.Error(SOME_TEMPLATE, ex);
    throw;
}


Создал отдельное приложение и оно выдаёт уже ошибку:
2021-05-31 14:00:18.774 +03:00 [DBG] OnPowerShell_InvocationStateChanged. State: Running, Reason (Exception): -
2021-05-31 14:00:19.967 +03:00 [DBG] OnPowerShell_InvocationStateChanged. State: Failed, Reason (Exception): System.Management.Automation.CmdletInvocationException: This command cannot be run due to the error: Отказано в доступе..
---> System.InvalidOperationException: This command cannot be run due to the error: Отказано в доступе..
at System.Management.Automation.MshCommandRuntime.ThrowTerminatingError(ErrorRecord errorRecord)
--- End of inner exception stack trace ---
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
at System.Management.Automation.Runspaces.LocalPipeline.InvokeHelper()
at System.Management.Automation.Runspaces.LocalPipeline.InvokeThreadProc()
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 2
BasiC2k
@BasiC2k
IIS изолирован от операционной системы и не может использоваться с правами пользователя. В среде разработки все работает, это факт. Но при развертывании приложения на IIS работает не все.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы