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()
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 2
BasiC2k
@BasiC2k
.NET developer (open to job offers)
IIS изолирован от операционной системы и не может использоваться с правами пользователя. В среде разработки все работает, это факт. Но при развертывании приложения на IIS работает не все.
Ответ написан
@cicatrix
было бы большой ошибкой думать
По-моему, ваш случай:
https://stackoverflow.com/questions/43283339/runni...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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