Я предполагаю, что вы можете использовать следующий подход - определить доступные ключи и перебрать их, а перебрать - собрать некоторые данные, например, так:
$keys = ['category_id', 'location_id', 'status_id'];
$operationAllowed = true;
foreach ($keys as $key) {
if (!empty( Я предполагаю, что вы можете использовать следующий подход - определить доступные ключи и перебрать их, а перебрать - собрать некоторые данные, например, так:
[110]REQUEST[$key])) {
$operationAllowed = $operationAllowed && isInTaxonomy($recordId, Я предполагаю, что вы можете использовать следующий подход - определить доступные ключи и перебрать их, а перебрать - собрать некоторые данные, например, так:
[110]REQUEST[$key]);
}
}
Два отдельных процесса, которые передают использование Вашей предпочтительной технологии. Сервисы с UI являются плохой идеей. Не идите по этой дороге - Вы будете сожалеть о нем.
У меня была очень хорошая сервисная коммуникация наличия результатов посредством простого сокетного соединения - документируют Ваш сервисный протокол хорошо, сохраняют его максимально простым, и это будет легче, чем Вы думаете.
Основные проблемы с интерактивными сервисами:
Безопасность - другой процесс мог отправить, это обменивается сообщениями через его насос сообщения, таким образом, получая доступ к СИСТЕМНОМУ процессу / ЛОКАЛЬНОМУ процессу.
Неполнота - интерактивный сервис никогда не видит сообщения оболочки, следовательно он не может взаимодействовать со значками области уведомлений.
Мы регулярно используем соединения TCP и соединения UDP для передачи информации от сервисов до другого exes, и, в некоторых случаях, MSMQ.
Я соглашаюсь с Greg. Возможно, Вы могли исследовать другой механизм IPC. Возможно, используйте сокеты и Ваш собственный протокол. Или, если Ваше сервисное приложение управления может только управлять сервисом на локальную машину, можно использовать именованные каналы (еще быстрее).
Это очень просто - Ваша потребность создать один поток для выполняет события приложения. Как это (исходный код для C++ с CLR, но Вашим может сделать это в C#):
ref class RunWindow{
public:
static void MakeWindow(Object^ data)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew TMainForm());
};
};
И создайте поток в основном
int main(array<System::String ^> ^args)
{
bool bService = RunAsService(L"SimpleServiceWithIconInTrayAndWindow");
if (bService)
{
System::Threading::Thread ^thread = gcnew System::Threading::Thread(gcnew ParameterizedThreadStart(RunWindow::MakeWindow));
thread->Start();
ServiceBase::Run(gcnew simpleWinService());
Application::Exit();
}
else
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
Application::Run(gcnew TMainForm());
}
return 0;
}
На практике Вы не должны связывать свой сервис с управлением UI.
Вот способ смешивания Сервисов и Форм
http://www.codeproject.com/KB/system/SystemTrayIconInSvc.aspx
Я выяснил, как это сделать, из этой статьи (щелкните по ссылку «Изменить» в таблице методов).
string wmiPath = "Win32_Service.Name='" + SERVICE_NAME + "'";
using (ManagementObject service = new ManagementObject(wmiPath))
{
object[] parameters = new object[11];
parameters[5] = true; // Enable desktop interaction
service.InvokeMethod("Change", parameters);
}
У меня есть решение в несколько шагов, вот план
мы не будем создавать проект службы с формой windows, вместо этого мы создадим решение visual studio, которое содержит проект службы windows, проект формы windows и проект настройки.
Идея заключается в том, чтобы иметь базу данных или файл, или все, что вам удобно для хранения данных, в которой вы будете хранить параметры, которые ваша служба windows будет всегда использовать для запуска. Таким образом, ваша служба windows и ваше приложение windows form должны иметь возможность изменять и извлекать данные из нее.
В главной форме вашего приложения Windows перетащите NotifyIcon на форму, во вкладке свойств найдите и выберите изображение .ico (вы можете создать его в visual studio, но это другая тема, которую вы можете найти в google или связаться со мной), которое будет отображаться в системном трее, когда вы запускаете приложение и главная форма активна или показана, попробуйте, запустите приложение.
Добавьте их оба в качестве выходов в установочный проект решения. Чтобы добавить проект в установочный проект, они должны находиться в одном решении. Щелкните правой кнопкой мыши проект установки в проводнике решений, выделите add и затем выберите project output, добавьте выходы службы windows и формы windows, и вы увидите их в проводнике решений под проектом установки.
Добавление службы windows идет дальше, но это другая тема, погуглите
Создание ярлыка для приложения windows и добавление его в папку запуска - это тоже другая тема, погуглите или свяжитесь со мной.
ПРИМЕЧАНИЕ Запрограммируйте вашу форму таким образом, чтобы кнопка закрытия не отображалась, а форма продолжала работать Me.visible = false и двойной щелчок по иконке в системном трее - единственный способ установить me.visible=true. Таким образом, при каждом запуске компьютера запускается и ваше приложение windows form, и visible сразу устанавливается в false, но так как у него есть notifyicon с изображением иконки, он будет отображаться в системном трее и двойной щелчок делает форму видимой для редактирования настроек, которые вы храните для службы, служба также запускается автоматически, так как вы установили это при настройке службы в проекте setup. моя почта iamjavademon@gmail.com для лучшей иллюстрации с помощью снимков экрана И объяснить полностью