PDA

View Full Version : مقاله: نصب کامپوننت های ویندوز توسط C#‎



amirjalili
سه شنبه 03 آذر 1388, 10:59 صبح
با سلام..
چند وقت قبل من سوالی رو از دوستان پرسیدم راجع به نصب iis هنگام نصب نرم افزار..
بعدا متوجه شدم برای این کار لازمه ما بتونیم کامپوننت های ویندوزی رو توسط خود سی شارپ نصب کنیم. برای همین من در زیر توضیح میدم که چطور این کار انجام میشه :

قبلش بگم که شما اگر در cmd به آدرس زیر مراجعه کنید لیستی از کامپوننت های ویندوز رو خواهید دید :


c:\windows\inf\sysoc.inf


این کامپوننت ها کامپوننت هایی هستند که قابل add ,remove شدن هستند.

در شروع مثلا میخواهیم IIS رو نصب کنیم.
برای این کار باید یک فایل TEXT به نام iis.textرو مثلا در درایو C ایجاد کنیم و توش مقادیر زیر رو بنویسیم.




[Components]
iis_common = on
iis_inetmgr = on
iis_www = on
iis_ftp = on
iis_htmla = on



برای این کار(نصب کامپوننت های ویندوز) از sysocmgr.EXE استفاده استفاده میشه.

دستوری که برای این کار در RUN به کار خواهد رفت عبارت زیر خواهد بود.


sysocmgr /i:%windir%\inf\sysoc.inf /u:c:\iis.txt


این دستور باعث شروع پروسه نصب کامپوننت IIS خواهد شد.
حالا ما میخواهیم توسط سی شارپ این کار رو انجام بدیم.

برای این کار از namespace زیر استفاده میکنیم.



using System.Diagnostics;

و کلاس های ProcessStartInfo و Process رو فراخوانی میکنیم.
در نهایت کد زیر این کار نصب کامپوننت مورد نظر رو خواهد کرد.



System.Diagnostics.ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/c " + "sysocmgr /i:%windir%\\inf\\sysoc.inf /u:c:\\iis.txt");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

amirjalili
سه شنبه 03 آذر 1388, 16:00 عصر
]چند لینک برای اطلاعات تکمیلی :

http://forums.techarena.in/server-scripting/738510.htm

http://forums.techarena.in/server-scripting/570952.htm

http://support.microsoft.com/kb/222444

amirjalili
چهارشنبه 04 آذر 1388, 10:08 صبح
کد run کردن سرویس های ویندوز(برای مثال IIS) در صورت stop بودن.



ServiceController IISChecker = new ServiceController();
IISChecker.ServiceName = "IISADMIN";
if (IISChecker.Status == ServiceControllerStatus.Running)
{
IISChecker.Stop();
}
else if (IISChecker.Status == ServiceControllerStatus.Stopped)
{
IISChecker.Start();
}


برای run کردن component های دیگه باید به جای IISADMIN نام سرویس مورد نظر خودتون رو بنویسید

amirjalili
دوشنبه 09 آذر 1388, 11:52 صبح
رجیستر کردن dll (در این مثال tinyرو رجیستر میکنیم):



//در بخش لود فرم اصلی باید از متدی که پایین نوشتیم به صورت زیر استفاده کنیم. اسم فایل tiny.ocx هست //

ServiceInstaller("regsvr32 c:\\tiny.ocx");
//
private void ServiceInstaller(object Command)
{
ProcessStartInfo procStartInfo =
new System.Diagnostics.ProcessStartInfo("cmd", "/c " + Command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

}

البته این تایپیک با موضوعی که ایجاد کردم کمی محتوی متفاوتی داره اما گفتم در راستای این مقاله این مورد رو هم بگم.
خودم تو سایت های خارجی گشتم اما اکثرا کدشون کار نمیکرد. بهتر دیدم که ایم مثال رو که کامل هم کار میکنه رو اینجا بذارم.
از دوستان هم میخوام با کد های مشابهشون در کامل تر شدن این تایپیک کمک کنند.
با تشکر

amirjalili
سه شنبه 10 آذر 1388, 14:21 عصر
کد uninstall کردن یک برنامه با استفاده از سی شارپ :



Process Uninstall = new Process();
Uninstall.StartInfo.FileName = "msiexec.exe";

Uninstall.StartInfo.Arguments = "/x \"c:\\test.msi\"/qn";
Uninstall.Start();


فایل msi فایلی هست که setup برنامه برای نصب یا remove از اون استفاده میکنه.(در این مثال test.msi که در درایو c هست )

amirjalili
جمعه 13 آذر 1388, 09:50 صبح
برای run کردن ASP.NET روی IIS با توجه در COMMAND متد های بالا دستور زیر را قرار بدهید ..


C:\Windows\Microsoft.NET\Framework64\v2.0.50727\as pnet_regiis.exe -i



البته option هایی هم داره که در اینترنت میتونید جستجو کنید.

amirjalili
یک شنبه 15 آذر 1388, 23:27 عصر
COMMAND نصب IIS روی ویندوز ویستا با ویندوز xp متفاوته..
برای نصب IIS روی ویستا بایدCOMMAND زیر را در کد های بالا قرار بدهید.




"pkgmgr /iu:IIS-WebServerRole;WAS-WindowsActivationService;WAS-ProcessModel;WAS-NetFxEnvironment;WAS-ConfigurationAPI;"


این COMMAND حتما کار میکنه و IIS رو نصب میکنه.
با تشکر.

مهران رسا
یک شنبه 15 آذر 1388, 23:42 عصر
سلام . ضمن تشکر از توضیحات خوبتون ، در این قسمت :

new System.Diagnostics.ProcessStartInfo("cmd", "/c " + Command);

پارامتر c/ چه استفاده ای داره ؟

Sajjad.Aghapour
دوشنبه 16 آذر 1388, 00:08 صبح
پارامتر c/ چه استفاده ای داره ؟


command رو در پنجره cmd اجرا میکنه و سپس این پنجره رو می بنده....

amirjalili
دوشنبه 16 آذر 1388, 12:31 عصر
سلامی دوباره..
من تصمیم دارم برای کامل شدن این تایپیک و با هدف اینکه اگه کسی در این مورد جستجو کرد اطلاعاتی کامل رو بدست بیاره این تایپیک رو تا جای ممکن و تا جایی که مطلبی در این مورد هست به روز کنم.

خطایی پس از نصب iis در ویندوز ویستا در خوندن فایل های ASPX رخ میده با عنوان HTTP ERROR 404.3.
برای رفع این خطا به سایت زیر مراجعه کنید. پس از جستجو دیدم که در این سایت توضیحات خوبی داده.

http://blog.fadavi.ir/mahdi/?p=1391

با تشکر

amirjalili
چهارشنبه 18 آذر 1388, 09:08 صبح
تغییر در فایل MetaBase.xml برای IIS در ویندوز ویستا :

هنگامی که شما بخواهید تغییراتی رو در IIS با کد نویسی و بدون استفاده از GUI انجام بدهید باید این تغییرات رو در فایل MetaBase.xml بدهید. این فایل در شاخه :


"%systemroot%\\system32\\inetsrv

موجوده.
برای این تغییرات شما باید از APPCMD.EXE استفاده کنید که اون هم در شاخه بالا هست.(البته در ویستا)

وقتی در ویندوز ویستا IIS رو نصب میکنید Default application pool رو حالت integrated هست که این ممکن ایجاد مشکل کنه. با تغییر اون به حالت classic مشکل بر طرف میشه.
برای اینکه این کار رو با سی شارپ انجام بدیم باید از COMMAND زیر برای ویرایش فایل METABASE استفاده کنیم.



"%systemroot%\\system32\\inetsrv\\appcmd set apppool DefaultAppPool /managedPipelineMode:Classic"


در ایم مثال ما DEFAULTAPPPOOL رو به حالت classic تغییر دادیم. شما میتوانید appppool مورد نظر خودتون رو به حالت دلخواه تغییر بدهید. فقط یادتون باشه اگه خواستید این command رو در cmd تست کنید باید run as administrator کنید.

برای اضافه کردن apppool دلخواه هم از command زیر استفاده کنید.



appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso',autoStart='True',managedPipelineMod e='Integrated']" /commit:apphost



جای عبارت contoso شما میتونید نام appPoll دلخواهتون رو وارد کنید و به جای integrated هم میتونید classic رو اضافه کنید یا در همون حالت integrated استفاده کنید.

برای اطلاعات بیشتر به سایت iis مراجعه کنید.
http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults

amirjalili
چهارشنبه 18 آذر 1388, 12:08 عصر
پس از نصب iis روی windows server 2003 احتمالا وب سایت شما اجرا نخواهد شد برای اینکه در iis 6 بخشی به نام web service extension وجود داره که در اونجا باید کلید allow رو فعال کنید اجازه مشاهده سایت به شما داده بشه. برای این کار از کد زیر برای ویرایش metabase.xml برای فعال کردن کلید allow استفاده میکنیم.



DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC");
PropertyValueCollection ext = site.Properties["WebSvcExtRestrictionList"];
ext.Value = "1,C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.5072 7\\aspnet_isapi.dll,0,ASP.NET v2.0.50727,ASP.NET v2.0.50727";
site.CommitChanges();



قبلش باید using System.DirectoryServices; رو add کنید.
مقدار 1 به معنی allow و 0 در صورتیکه به جای 1 استفاده بشه به معنی prohibit یا منع دسترسی هست.

با تشکر

amirjalili
یک شنبه 22 آذر 1388, 11:13 صبح
تغییر مشخصه local path در IIS برای Default web site:



public static void ChangeHomePath(string path)
{
DirectoryEntry home = new DirectoryEntry("IIS://localhost/w3svc/1/ROOT");
DirectoryInfo dir = new DirectoryInfo(path);
home.Properties["Path"][0] = dir.FullName;
home.CommitChanges();
}



با این کار local شما از c:/inetpub/wwwroot به محل مورد نظر شما انتقال می یابد.

متدی که در بالا نوشتم در همه ورژن های xp,server2003,server2008 به درستی کار میکنه.

با تشکر

amirjalili
یک شنبه 22 آذر 1388, 13:31 عصر
ایجاد یک vitural directory جدید در IIS در سی شارپ :




DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/W3SVC");
object[] newSiteConfig = new object[] { "My New Website", new object[] { "localhost:80:test.com" }, "C:\\" };
object websiteId = (object)w3svc.Invoke("CreateNewSite", newSiteConfig);
int WebSiteId = (int)websiteId;

amirjalili
سه شنبه 24 آذر 1388, 11:53 صبح
چند property دیگر برای تغییر تنظیمات IIS :



home.Properties["DefaultDoc"].Value = "index.aspx";
home.Properties["enableDocFooter"].Value = true || false;
home.Properties["defaultDocFooter"].Value = "C:\\AryanicHighCRM\\www\\2.aspx";


DefaultDoc برای تغییر صفحه پیش فرض iis
enableDocFooter برای فعال کردن کلید enable document footer
defaultDocFooter برای مشخص کردن مکان فایل پیش فرض

-----------------------------------------------------------------
مشخصات بالا رو میتوانید در تب Documents از property وب سایت موجود در IIS ببینید.

amirjalili
سه شنبه 15 دی 1388, 11:30 صبح
command نصب دیتا بیس های aspnetdb , aspstate




C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspn et_regsql.exe -ssadd -sstype c -d aspnetdb -S (local) -U username -P password

به جای aspnetdb میتونید اگه خواستید aspstate رو نصب کنید مقدار aspstate رو قرار بدید.