PDA

View Full Version : آموزش: فعال سازي Interact with desktop fراي سرويس هاي دات نت



حامد مصافی
شنبه 21 آذر 1388, 09:57 صبح
همانطور که می دانید برای نصب یک سرویس توسط ابزار های دات نت پروژه شما باید یک کلاس ServiceInstall تعبیه شده داشته باشد تا installutil.exe بتواند متد های نصاب را شناسایی کرده و آنها را اجرا کند. اما خصوصیات این کلاس به شما اجازه معرفی سرویس به عنوان یک سرویس تعاملی با دسکتاپ را به شما نمی دهند. (گزینه Allow service to Interact with desktop )
یعنی شما باید از ابزاری غیر از نصاب دات نت (مانند installshield یا wise یا غیره استفاده کنید) یا اینکه بعد از نصب به صورت دستی این گزینه را تغییر دهید. اما روش بهتری هم وجود دارد. اینکه هنگام نصب از رجیستری این گزینه را فعال کنید.
برای رفع این مشکل در ProjectInstaller شی serviceInstaller را انتخاب کرده و برای رویداد AfterInstall آن کد های زیر را بنویسید:


private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e)
{
RegistryKey ServiceTypeKey = Registry.LocalMachine.OpenSubKey(
@"SYSTEM\CurrentControlSet\Services\" + serviceInstaller1.ServiceName, true);

if (ServiceTypeKey != null)
if (ServiceTypeKey.GetValue("Type") != null)
ServiceTypeKey.SetValue("Type",
((int)ServiceTypeKey.GetValue("Type") | 256));
else
ServiceTypeKey.SetValue("Type", 256);
}

نکته : بدیهی است که نام serviceInstaller1 را مطابق با نام serviceInstaller موجود در ProjectInstaller تغییر دهید.