Member 11790928 Ответов: 1

Не удается запустить службу windows


Я пишу сервис для чтения значений данных из симулятора. Когда я пытаюсь отладить свою службу, я получаю следующее исключение: "элемент управления ActiveX не может быть создан, потому что текущий поток не находится в однопоточной квартире".Любая помощь в этом отношении очень ценится.
Мой служебный код
<pre>public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            this.read();
        }
        public void read()
        {
            String sFilepath = @"C:\Users\admin\Desktop\TestService Projects\DATA\Read.txt";
            System.IO.StreamWriter oStreamWriter = new System.IO.StreamWriter(sFilepath, true);
            Connection con = new Connection();
            string[] result= con.read(4, Connection.baudrate.B19200, Connection.Parity.E, Connection.Databit.EIGHT, Connection.Stopbit.ONE, Connection.RegisterType.HoldingRegister, "1", 10);
            for(int i=0;i<result.Length;i++)
            {
                oStreamWriter.WriteLine(result[i]);
            }
            oStreamWriter.Close();
         }

        protected override void OnStop()
        {
        }



Что я уже пробовал:

Я попробовал полностью отладить и переустановить установочный файл.

Suvabrata Roy

Пожалуйста, поделитесь служебным кодом.

Member 11790928

@suvabrata Roy я вызываю dll-файл в своей службе, который inturn вызывает форму windows для установки параметров

Suvabrata Roy

Пожалуйста, опубликуйте полный код, я не смог найти никакой активной зависимости X в вашем текущем блоке кода

Bernhard Hiller

"ActiveX Control" - правда? Служба не должна содержать никаких элементов пользовательского интерфейса. Хорошо, там могут быть элементы управления ActiveX, не содержащие элементов пользовательского интерфейса, но я думаю ...

Member 11790928

Я вызываю dll файл в моей службе который inturn вызывает форму windows для установки параметров

Jochen Arndt

Бернхард сказал: "сервис не должен содержать никаких элементов пользовательского интерфейса".
Форма windows - это пользовательский интерфейс (User Interface).

Если вам нужна какая-то конфигурация для вашей службы, вы должны предоставить дополнительное приложение установки, которое хранит конфигурацию и перезапускает службу.

Сама служба должна загрузить конфигурацию при запуске. Опционально он также может перезагрузить его по сигналу.

Member 11790928

Как настроить внутренний сервис

Jochen Arndt

Вы не можете использовать элементы графического интерфейса!

Сохраните конфигурацию в конфигурационном файле или реестре.
Прочтите это при запуске службы.
Напишите приложение для чтения, изменения и хранения конфигурации.

1 Ответов

Рейтинг:
0

Matt Comb

вы пробовали пометить свой метод как:

[ComRegisterFunction]
public void read()
        {
            String sFilepath = @"C:\Users\admin\Desktop\TestService Projects\DATA\Read.txt";
            System.IO.StreamWriter oStreamWriter = new System.IO.StreamWriter(sFilepath, true);
            Connection con = new Connection();
            string[] result= con.read(4, Connection.baudrate.B19200, Connection.Parity.E, Connection.Databit.EIGHT, Connection.Stopbit.ONE, Connection.RegisterType.HoldingRegister, "1", 10);
            for(int i=0;i<result.Length;i++)
            {
                oStreamWriter.WriteLine(result[i]);
            }
            oStreamWriter.Close();
         }