Не удается вызвать DllImport в web api netcore, размещенном как служба Windows

#c# #asp.net-core #windows-services #dllimport #webapi

Вопрос:

  • DLL, если они находятся в bin /
  • Кроме того, это приложение корректно работает с консолью
  • Я использую netcore 2.2
  • Импорт dll класса
     public class SDK
    {
        public const int POSITION_TOP_LEFT =      0;
        public const int POSITION_TOP =           1;
        public const int POSITION_TOP_RIGHT =     2;
        public const int POSITION_RIGHT =         3;
        public const int POSITION_BOTTOM_RIGHT =  4;
        public const int POSITION_BOTTOM =        5;
        public const int POSITION_BOTTOM_LEFT =   6;
        public const int POSITION_LEFT =          7;
        public const int POSITION_CENTER =        8;
    
        public const int WEBCAM_VIEW_PADDING =    0;
        public const int WEBCAM_VIEW_CROPPING =   1;
        public const int WEBCAM_VIEW_STRETCHING = 2;
    
        [DllImport("ScnLib.dll")] public static extern void ScnLib_About();
        [DllImport("ScnLib.dll", CharSet = CharSet.Unicode)] public static extern bool ScnLib_SetLicenseW(string Name, string Email, string Key);
        [DllImport("ScnLib.dll", CharSet = CharSet.Unicode)] public static extern void ScnLib_GetErrorMessageW(StringBuilder ErrMsg); // ErrMsg >= 2048 Chars
        [DllImport("ScnLib.dll")] public static extern bool ScnLib_CheckComponents();
        [DllImport("ScnLib.dll")] public static extern bool ScnLib_Initialize();
        [DllImport("ScnLib.dll")] public static extern void ScnLib_Uninitialize(); }
 
  • Конечная точка веб-Api
        [HttpGet("start")]
        public IActionResult start()
        {            
            try
            {  
                
                bool test = ZDSoft.SDK.ScnLib_IsRecording(); 
                log.Debug("seguimiento 0_ = "   test);
    
                if (ZDSoft.SDK.ScnLib_IsRecording())
                {
                    log.Warn("Grabación activa.");
                    return BadRequest("Grabación activa.");
                }
    
                log.Debug("seguimiento 00_");
                bool test2 = ZDSoft.SDK.ScnLib_Initialize();
                log.Debug("seguimiento 000_");
                ZDSoft.SDK.ScnLib_SetLicenseW("example", "example", "example");
                ZDSoft.SDK.ScnLib_SetVideoBitrate(720);
                ZDSoft.SDK.ScnLib_SetLogoImageW("logo.png");
    
                log.Debug("seguimiento 1_");
    
                ZDSoft.SDK.ScnLib_SetLogoPosition(ZDSoft.SDK.POSITION_TOP_RIGHT, 0, 0);
                if (!ZDSoft.SDK.ScnLib_IsRecordAudioSource(false))
                {
                    ZDSoft.SDK.ScnLib_RecordAudioSource(false, true);
                }
    
                log.Debug("seguimiento 2_");
    
                var path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), 
                "Recording", $"{Guid.NewGuid()}.mp4");           
    
                ZDSoft.SDK.ScnLib_SetVideoPathW(path);
    
                log.Debug("seguimiento 3_");
    
                ZDSoft.SDK.ScnLib_StartRecording();
    
                log.Debug("seguimiento 4_");
    
                log.Info("Grabacion en Progreceso...");                
    
                return Ok("Grabacion en Progreceso...");
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                return BadRequest(ex.Message);
            }
        }
 
  • Отслеживание журнала заключается в том, что в этой строке

bool test2 = ZDSoft.SDK.ScnLib_Initialize();

Я искал ответ, я видел, что это может быть вопрос разрешений, но если это так, потому что при запуске приложения в visual studio у меня есть правильное функционирование и даже при выполнении сборки

Комментарии:

1. Есть ли какое-либо сообщение об ошибке? Как вы сказали, возможно, проблема связана с разрешением или файлом DLL, отсутствующим после развертывания, поэтому попробуйте получить подробное сообщение об ошибке.

2. У меня нет сообщения об ошибке, оно просто продолжает загружаться и больше ничего не делает, у меня даже есть журнал событий Windows и нет журнала ошибок.

3. Я читал, что это было связано с типом сеанса, который был у службы, так как эта библиотека dll предназначена для записи экрана, но я даже видел, что службы с сеансом 0 нет, но все еще есть приложения, которые делают то же самое, но я не знаю, как это сделать, если это было решением.

4. Также, если я вызываю другую функцию библиотеки dll, она хорошо реагирует, но по совпадению эта функция не вызывает запись, если не состояние, это заставляет меня думать, что если это проблема с записью в частности.