2013-06-24 1 views
1

Я пытаюсь написать проект Windows Service на C#.Преобразование каталога в строку в службе Windows

Я хочу скопировать папку в другой каталог. Я написал коды, все идеально

DirectoryInfo source = new DirectoryInfo("C:\\belgeler"); 
DirectoryInfo target = new DirectoryInfo("E:\\Backup"); 

Это правильное применение, но когда я это пишу ...

DirectoryInfo source = new DirectoryInfo(from_path); 
DirectoryInfo target = new DirectoryInfo(to_path); 

Ошибка «Поле инициализатор не может ссылаться на нестатическом поле, метод или свойство 'BACKUP (myproject_name) .Service1.veri'

//string to_path = Registry.LocalMachine.GetValue("ToPath").ToString(); 
//string from_path = Registry.LocalMachine.GetValue("FromPath").ToString(); 

Этот кодовый блок является рабочим консольным приложением, но в службах Windows это не так.

+1

Это нестатическое поле, метод или свойство? ;) –

+0

«Этот кодовый блок является рабочим консольным приложением, но в службе Windows это не так». Это COMPILING как консольное приложение, но не как сервис Windows? Я очень сомневаюсь, что ... – aquinas

+0

Являются членами 'from_path' и' to_path' вашего класса или являются локальными переменными? Как насчет 'source' или' target'? –

ответ

2

Ваши переменные source и target являются переменными-членами вашего класса. Допускается следующий код:

DirectoryInfo source = new DirectoryInfo("C:\\belgeler"); 
DirectoryInfo target = new DirectoryInfo("E:\\Backup"); 

Это разрешено, поскольку оно не ссылается ни на какие другие переменные-члены вашего класса. Но когда вы пытаетесь:

DirectoryInfo source = new DirectoryInfo(from_path); 
DirectoryInfo target = new DirectoryInfo(to_path); 

Эти ссылки другие переменные from_path и to_path, не допускаются.

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

0

Вы можете установить значение поля, используя другое поле в качестве параметра, вам просто нужно сделать это в конструкторе. Это гарантирует, что поля будут установлены в правильном порядке.

A field initializer cannot reference the nonstatic field, method, or property