Сделай Сам Свою Работу на 5

Создание инсталлятора и установка





Минск 2011


Оглавление

 

Введение. 2

Постановка задачи.. 3

1 Формы программы.. 4

1.1 Главная форма программы.. 4

1.2 Диалог запуска новой задачи. 7

2 Работа программы.. 8

2.1 Принцип работы программы.. 8

3 Установка приложения. 9

3.1 Создание инсталлятора и установка. 9

Заключение. 11

Список использованных источников. 12

Приложение А... 13

Приложение Б.. 28

 

 


Введение

Курсовой проект выполнен в Visual С# 4.0.

Visual C# (4.0) 2010 обеспечивает поддержку позднего связывания с динамическими типами посредством впервые появившегося в этой версии типа dynamic. Новый тип позволяет реализовать целый ряд новых сценариев, в том числе упрощенный доступ к API-интерфейсам модели COM, например API-интерфейсам автоматизации Office, к динамическим API-интерфейсам, таким как библиотеки IronPython, и DOM-модели HTML-документов.

Проект Customized Task Manager состоит из одной формы и включает в себя, помимо основных библиотек, библиотеку System.Diagnostics и System.Threading.

В пространстве имен System.Diagnostics предусмотрены классы, позволяющие осуществлять взаимодействие с системными процессами, журналами событий и счетчиками производительности.



Пространство имен System.Threading содержит классы и интерфейсы, которые дают возможность программировать в многопоточном режиме. Помимо классов синхронизации работы потоков и доступа к данным (Mutex, Monitor, Interlocked, AutoResetEvent и т. д.), это пространство имен содержит класс ThreadPool, позволяющий использовать пул предоставляемых системой потоков, и класс Timer, выполняющий методы обратного вызова в потоках пула потоков.


Постановка задачи

Требуется разработать диспетчер задач для операционных систем семейства Microsoftâ Windows NT 4.0 и старше, в котором реализованы базовые операции с процессами и отображением информации о них:

- отображение списка запущенных процессов

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

- завершение процессов

- запуск новых задач

- изменение приоритета

 

Формы программы

 

Главная форма программы

 

1.1.1 При запуске программы создается главная форма Form1 – представитель класса TForm (рисунок 1). При создании формы в компонент lvprocesslist (ListView) загружается список процессов и их следующие параметры:



- id процесса

- время работы

- время ЦП

- используемая память

- пиковое значение используемой память

- количество потоков

- количество дескрипторов

 

 

Рисунок 1 – Внешний вид Form1

1.1.2 StatusBar1 и StatusBar2 (рисунок 2) – представляют элемент управления Windows «Строка состояния». Данные элементы отображают общее количество запущенных процессов и потоков.

 

 

Рисунок 2 – Элементы StatusBar1 и StatusBar2

 

1.1.3 На форме так же присутствует элемент управления Menu (MenuStrip1) (рисунок 3), который представляет систему меню для формы. Содержит три вкладки:

1. New Task

2. End Process

3. Exit Task Manager

В проекте реализована возможность запуска перечисленных задач с помощью «горячих» клавиш.

 

Рисунок 3 – Элемент MenuStrip1
1.2 Диалог запуска новой задачи

 

1.2.1 При выборе пункта меню New Task выводится форма frmnewprcdetails – представитель класса TForm (рисунок 4). Форма содержит три кнопки и текстовое поля для вводя имени запускаемой задачи. При желании, пользователь может по нажатию кнопки Browse сам найти необходимое приложение через проводник.

 

 

Рисунок 4 – Внешний вид frmnewprcdetails.

 

 

Работа программы

 

Принцип работы программы

 

Во время запуска программы создается главная форма, в которую загружается список процессов и их параметры. Используется класс Process и его метод GetProcesses(), который создает новый компонент Process для каждого ресурса процесса на локальном компьютере.

При нажатии правой кнопкой мыши по любому процессу из списка, появляется меню с двумя пунктами (рисунок 5):



1. End Proces. При нажатии вызывается метод Kill класса Process, который немедленно завершает выбранный процесс.

2. Set Priority. При нажатии появляется ещё шесть пунктов с возможными приоритетами процесса(рисунок 5), а так же отображается текущий приоритет. При изменении приоритета изменяется свойство PriorityClass класса Process.

Опишем работу пунктов меню MenuStrip1:

1. New Task. Запускает диалоговое окно описанное в пункте 1.2. с помощь которого пользователь указывает имя новой задачи, путём вводы в текстовое поле или с помощью проводника. Задача запускается при помощи метода Start() класса Process, параметром которого является имя искомой задачи.

2. End Process. Вызывает метод Kill класса Process для выделенного процесса.

3. Exit Task Manager. Закрывает приложение с помощью метода Exit.

После выполнения какого-либо действия, программа возвращается в режим ожидания пользовательских действий.

Для завершения работы с Task Manager пользователю достаточно нажать на кнопку Exit Task Manager системного меню.

В Приложении A приведён исходный код программы. В Приложении Б приведён исходный код диалоговой формы запуска задачи.

 

 

Рисунок 5 – Приоритеты процесса

Установка приложения

 

Создание инсталлятора и установка

Инсталлятор был создан при помощи инструментов Visual Studio, в которой был написан и сам проект. А именно был использован «Установщик Visual Studio» (рисунок 6)

 

 

Рисунок 6 – Внешний вид «Установщика Visual Studio»

 

После добавления файлов проекта в установщик, он создаёт файл Setup нашего диспетчера задач.

Теперь можно запустить установку приложения и установить его на компьютер с операционной системой Windows, так же желательно наличие .NET Framework 4.

 

Рисунок 7 – Установка Task Manager
Заключение

В данной курсовой работе был разработан диспетчер задач. Интерфейс программы был сделан по возможности наиболее интуитивно понятным. Для создания проекта была использована среда разработки Visual C# 2010.

 

Список использованных источников

 

1 http://msdn.microsoft.com
ПРИЛОЖЕНИЕ А

Исходный код программы.

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Diagnostics;

using System.Threading;

 

namespace CustomizedTaskManager

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class frmmain : System.Windows.Forms.Form

{

private System.Windows.Forms.NotifyIcon taskmgrnotify;

private System.ComponentModel.IContainer components;

private System.Windows.Forms.StatusBar statusBar1;

private System.Windows.Forms.MainMenu mainMenu1;

private System.Windows.Forms.MenuItem menuItem1;

private System.Windows.Forms.MenuItem menuItem2;

private System.Windows.Forms.MenuItem menuItem3;

private System.Windows.Forms.MenuItem menuItem4;

private System.Windows.Forms.MenuItem menuItem5;

private System.Windows.Forms.MenuItem menuItem6;

private System.Windows.Forms.MenuItem menuItem8;

private System.Windows.Forms.StatusBarPanel processcount;

private System.Windows.Forms.StatusBarPanel threadcount;

private System.Windows.Forms.ContextMenu lvcxtmnu;

private System.Windows.Forms.MenuItem menuItem9;

private System.Windows.Forms.MenuItem menuItem10;

private System.Windows.Forms.MenuItem menuItem11;

private System.Windows.Forms.MenuItem menuItem12;

private System.Windows.Forms.MenuItem menuItem13;

private System.Windows.Forms.MenuItem menuItem14;

private System.Windows.Forms.MenuItem menuItem15;

private System.Windows.Forms.MenuItem menuItem16;

private System.Windows.Forms.ListView lvprocesslist;

private System.Windows.Forms.ColumnHeader procname;

private System.Windows.Forms.ColumnHeader PID;

private System.Windows.Forms.ColumnHeader procstarttime;

private System.Windows.Forms.ColumnHeader proccputime;

private System.Windows.Forms.ColumnHeader memusage;

private System.Windows.Forms.ColumnHeader peakmemusage;

private System.Windows.Forms.ColumnHeader noofhandles;

private System.Windows.Forms.ColumnHeader nonofthreads;

private System.Windows.Forms.TabControl tabControl1;

private System.Windows.Forms.TabPage tabPage1;

private System.Windows.Forms.TabPage tabPage2;

private System.Diagnostics.PerformanceCounter pcclrmemmngr;

private System.Windows.Forms.MenuItem menuItem7;

private System.Windows.Forms.Label lblheapbyte;

private System.Windows.Forms.Label gen0heapsize;

private System.Windows.Forms.Label Label2;

private System.Windows.Forms.Label gen1heapsize;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.Label gen2heapsize;

private System.Windows.Forms.Label label5;

private System.Windows.Forms.Label lblgctime;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label lbltotalreservedbytes;

private System.Windows.Forms.Label label7;

private System.Windows.Forms.Label label8;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.Label lbltotheapsize;

private void LoadAllProcessesOnStartup()

{

Process[] processes = null;

try

{

processes = Process.GetProcesses(mcname);

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

Application.Exit();

return;

}

int threadscount = 0;

foreach(Process p in processes)

{

try

{

string[] prcdetails = new string[]{p.ProcessName,p.Id.ToString(),p.StartTime.ToShortTimeString(),p.TotalProcessorTime.Duration().Hours.ToString()+":"+p.TotalProcessorTime.Duration().Minutes.ToString()+":"+p.TotalProcessorTime.Duration().Seconds.ToString(),(p.WorkingSet/1024).ToString()+"k",(p.PeakWorkingSet/1024).ToString()+"k",p.HandleCount.ToString(),p.Threads.Count.ToString()};

ListViewItem proc = new ListViewItem(prcdetails);

lvprocesslist.Items.Add(proc);

threadscount += p.Threads.Count;

}

catch{}

}

statusBar1.Panels[0].Text = "Processes : "+processes.Length.ToString();

statusBar1.Panels[1].Text = "Threads : "+(threadscount+1).ToString();

}

private void LoadAllProcesses(object temp)

{

try

{

presentprocdetails.Clear();

processes = Process.GetProcesses(mcname);

bool runningproccountchanged= false;

Hashtable lvprocesses = null;

int threadscount = 0;

foreach(Process p in processes)

{

try

{

string[] prcdetails = new string[]{p.ProcessName,p.Id.ToString(),p.StartTime.ToShortTimeString(),p.TotalProcessorTime.Duration().Hours.ToString()+":"+p.TotalProcessorTime.Duration().Minutes.ToString()+":"+p.TotalProcessorTime.Duration().Seconds.ToString(),(p.WorkingSet/1024).ToString()+"k",(p.PeakWorkingSet/1024).ToString()+"k",p.HandleCount.ToString(),p.Threads.Count.ToString()};

presentprocdetails.Add(prcdetails[1],prcdetails[0].ToString()+"#"+prcdetails[2].ToString()+"#"+prcdetails[3].ToString()+"#"+prcdetails[4].ToString()+"#"+prcdetails[5].ToString()+"#"+prcdetails[6].ToString()+"#"+prcdetails[7].ToString());

threadscount += p.Threads.Count;

}

catch{}

}

if((processes.Length != lvprocesslist.Items.Count) || erroccured)

{

runningproccountchanged = true;

lvprocesses = new Hashtable();

foreach(ListViewItem item in lvprocesslist.Items)

{

lvprocesses.Add(item.SubItems[1].Text,"");

}

}

if(runningproccountchanged || erroccured)

{

erroccured = false;

foreach(Process p in Process.GetProcesses(mcname))

{

try

{

if(!lvprocesses.Contains(p.Id.ToString()))

{

string[] newprcdetails = new string[]{p.ProcessName,p.Id.ToString(),p.StartTime.ToShortTimeString(),p.TotalProcessorTime.Duration().Hours.ToString()+":"+p.TotalProcessorTime.Duration().Minutes.ToString()+":"+p.TotalProcessorTime.Duration().Seconds.ToString(),(p.WorkingSet/1024).ToString()+"k",(p.PeakWorkingSet/1024).ToString()+"k",p.HandleCount.ToString(),p.Threads.Count.ToString()};

ListViewItem newprocess = new ListViewItem(newprcdetails);

lvprocesslist.Items.Add(newprocess);

}

IDictionaryEnumerator enlvprocesses = lvprocesses.GetEnumerator();

while(enlvprocesses.MoveNext())

{

if(!presentprocdetails.Contains(enlvprocesses.Key))

{

foreach(ListViewItem item in lvprocesslist.Items)

{

if(item.SubItems[1].Text.ToString().ToUpper() == enlvprocesses.Key.ToString().ToUpper())

{

lvprocesslist.Items.Remove(item);

}

}

}

}

}

catch{}

}

}

IDictionaryEnumerator enpresentprodetails = presentprocdetails.GetEnumerator();

bool valchanged = false;

while (enpresentprodetails.MoveNext())

{

foreach(ListViewItem item in lvprocesslist.Items)

{

if(item.SubItems[1].Text.ToString().ToUpper() == enpresentprodetails.Key.ToString().ToUpper())

{

string[] presentprocessdetails = enpresentprodetails.Value.ToString().Split('#');

if(item.SubItems[3].Text.ToString() != presentprocessdetails[2].ToString())

{

valchanged = true;

item.SubItems[3].Text = presentprocessdetails[2].ToString();

}

if(item.SubItems[4].Text.ToString() != presentprocessdetails[3].ToString())

{

valchanged = true;

item.SubItems[4].Text = presentprocessdetails[3].ToString();

}

if(item.SubItems[5].Text.ToString() != presentprocessdetails[4].ToString())

{

valchanged = true;

item.SubItems[5].Text = presentprocessdetails[4].ToString();

}

if(item.SubItems[6].Text.ToString() != presentprocessdetails[5].ToString())

{

valchanged = true;

item.SubItems[6].Text = presentprocessdetails[5].ToString();

}

if(item.SubItems[7].Text.ToString() != presentprocessdetails[6].ToString())

{

valchanged = true;

item.SubItems[7].Text = presentprocessdetails[6].ToString();

}

if(menuItem17.Checked)

{

valchanged = false;

}

if(valchanged)

{

item.ForeColor = Color.Red;

valchanged = false;

}

else

{

item.ForeColor = Color.Black;

}

break;

}

}

}

statusBar1.Panels[0].Text = "Processes : "+processes.Length.ToString();

statusBar1.Panels[1].Text = "Threads : "+(threadscount+1).ToString();

}

catch{}

}

private void SetProcessPriority(MenuItem item)

{

try

{

int selectedpid = Convert.ToInt32(lvprocesslist.SelectedItems[0].SubItems[1].Text.ToString());

Process selectedprocess = Process.GetProcessById(selectedpid,mcname);

if(item.Text.ToUpper() == "HIGH")

selectedprocess.PriorityClass = ProcessPriorityClass.High;

else if(item.Text.ToUpper() == "LOW")

selectedprocess.PriorityClass = ProcessPriorityClass.Idle;

else if(item.Text.ToUpper() == "REAL-TIME")

selectedprocess.PriorityClass = ProcessPriorityClass.RealTime;

else if(item.Text.ToUpper() == "ABOVE NORMAL")

selectedprocess.PriorityClass = ProcessPriorityClass.AboveNormal;

else if(item.Text.ToUpper() == "BELOW NORMAL")

selectedprocess.PriorityClass = ProcessPriorityClass.BelowNormal;

else if(item.Text.ToUpper() == "NORMAL")

selectedprocess.PriorityClass = ProcessPriorityClass.Normal;

foreach(MenuItem mnuitem in menuItem10.MenuItems)

{

mnuitem.Checked = false;

}

item.Checked = true;

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void LoadAllMemoryDetails(object temp)

{

try

{

float totheapsize,fgen0heapsize,fgen1heapsize,fgen2heapsize;

pcclrmemmngr.MachineName = mcname;

pcclrmemmngr.InstanceName = "aspnet_wp";//System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString().Substring(0, 14);

pcclrmemmngr.CategoryName = ".NET CLR Memory";

pcclrmemmngr.CounterName = "# Bytes in all Heaps";

totheapsize = pcclrmemmngr.NextValue();

lbltotheapsize.Text = totheapsize+" Bytes";

pcclrmemmngr.CounterName = "Gen 0 heap size";

fgen0heapsize = pcclrmemmngr.NextValue();

gen0heapsize.Text = fgen0heapsize.ToString()+" Bytes"+" ("+((fgen0heapsize/totheapsize)*100)+")"+"%";

pcclrmemmngr.CounterName = "Gen 1 heap size";

fgen1heapsize = pcclrmemmngr.NextValue();

gen1heapsize.Text = fgen1heapsize.ToString()+" Bytes"+" ("+((fgen1heapsize/totheapsize)*100)+")"+"%";

pcclrmemmngr.CounterName = "Gen 2 heap size";

fgen2heapsize = pcclrmemmngr.NextValue();

gen2heapsize.Text = fgen2heapsize.ToString()+" Bytes"+" ("+((fgen2heapsize/totheapsize)*100)+")"+"%";

pcclrmemmngr.CounterName = "# Total committed Bytes";

lblgctime.Text =pcclrmemmngr.NextValue().ToString()+" Bytes";

pcclrmemmngr.CounterName = "# Total reserved Bytes";

label1.Text =pcclrmemmngr.NextValue().ToString()+" Bytes";

pcclrmemmngr.CounterName = "Large Object Heap size";

label7.Text =pcclrmemmngr.NextValue().ToString()+" Bytes";

}

catch

{

 

}

}

#endregion

public frmmain()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

 

//

// TODO: Add any constructor code after InitializeComponent call

//

}

 

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

 

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

objtaskmgr = new frmmain();

Application.Run(objtaskmgr);

}

 

private void taskmgrnotify_Click(object sender, System.EventArgs e)

{

if(objtaskmgr.Visible)

{

objtaskmgr.Visible = false;

taskmgrnotify.Text = "Task Manager is in Invisible Mode";

}

else

{

objtaskmgr.Visible = true;

taskmgrnotify.Text = "Task Manager is in visible Mode";

}

}

private void frmmain_Load(object sender, System.EventArgs e)

{

mcname = ".";

presentprocdetails = new Hashtable();

LoadAllProcessesOnStartup();

System.Threading.TimerCallback timerDelegate =

new System.Threading.TimerCallback(this.LoadAllProcesses);

t = new System.Threading.Timer(timerDelegate,null,1000,1000);

}

 

private void menuItem3_Click(object sender, System.EventArgs e)

{

//Here,We are going to kill selected Process by getting ID...

if(lvprocesslist.SelectedItems.Count>=1)

{

try

{

int selectedpid = Convert.ToInt32(lvprocesslist.SelectedItems[0].SubItems[1].Text.ToString());

Process.GetProcessById(selectedpid,mcname).Kill();

}

catch

{

erroccured = true;

}

}

}

 

private void menuItem2_Click(object sender, System.EventArgs e)

{

try

{

objnewprocess = new frmnewprcdetails();

objnewprocess.ShowDialog();

if(newprocpathandparm.Length != 0)

{

if(newprocpathandparm.IndexOf("\\") == -1)

{

string[] newprocdetails = newprocpathandparm.Split(' ');

if(newprocdetails.Length > 1)

{

Process newprocess = Process.Start(newprocdetails[0].ToString(),newprocdetails[1].ToString());

}

else

{

Process newprocess = Process.Start(newprocdetails[0].ToString());

}

}

else

{

string procname = newprocpathandparm.Substring(newprocpathandparm.LastIndexOf("\\")+1);

string[] newprocdetails = procname.Split(' ');

if(newprocdetails.Length > 1)

{

Process newprocess = Process.Start(newprocpathandparm.Replace(newprocdetails[1].ToString(),""),newprocdetails[1].ToString());

}

else

{

Process newprocess = Process.Start(newprocpathandparm);

}

 

}

}

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}

 

private void menuItem4_Click(object sender, System.EventArgs e)

{

Application.Exit();

}

 

private void menuItem6_Click(object sender, System.EventArgs e)

{

if(menuItem6.Checked)

{

menuItem6.Checked = false;

objtaskmgr.TopMost = false;

}

else

{

menuItem6.Checked = true;

objtaskmgr.TopMost = true;

}

}

 

private void menuItem8_Click(object sender, System.EventArgs e)

{

if(menuItem8.Checked)

{

menuItem8.Checked = false;

objtaskmgr.ShowInTaskbar = true;

}

else

{

menuItem8.Checked = true;

objtaskmgr.ShowInTaskbar = false;

}

}

 

private void menuItem9_Click(object sender, System.EventArgs e)

{

menuItem3_Click(sender,e);

}

 

private void menuItem11_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem11);

}

 

private void menuItem15_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem15);

}

 

private void menuItem16_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem16);

}

 

private void menuItem12_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem12);

}

private void menuItem13_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem13);

}

 

private void menuItem14_Click(object sender, System.EventArgs e)

{

SetProcessPriority(menuItem14);

}

 

private void menuItem10_Popup(object sender, System.EventArgs e)

{

try

{

int selectedpid = Convert.ToInt32(lvprocesslist.SelectedItems[0].SubItems[1].Text.ToString());

Process selectedprocess = Process.GetProcessById(selectedpid,mcname);

string priority = selectedprocess.PriorityClass.ToString();

foreach(MenuItem mnuitem in menuItem10.MenuItems)

{

string mnutext = mnuitem.Text.ToUpper().Replace(" ","");

if(mnutext == "LOW")

mnutext = "IDLE";

if(mnutext != priority.ToUpper())

mnuitem.Checked = false;

else

{

mnuitem.Checked = true;

}

}

 

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void menuItem7_Click(object sender, System.EventArgs e)

{

try

{

string caption = "Enter Machine Name";

objnewprocess = new frmnewprcdetails(caption);

if(objnewprocess.ShowDialog()!= DialogResult.Cancel)

{

t.Dispose();

presentprocdetails.Clear();

lvprocesslist.Items.Clear();

LoadAllProcessesOnStartup();

if(frmmain.mcname == ".")

{

frmmain.objtaskmgr.Text = "Task Manager Connected to Local";

menuItem3.Visible = true;

menuItem9.Visible = true;

menuItem2.Visible = true;

menuItem10.Visible = true;

}

else

{

frmmain.objtaskmgr.Text = "Task Manager Connected to "+frmmain.mcname;

menuItem3.Visible = false;

menuItem9.Visible = false;

menuItem2.Visible = false;

menuItem10.Visible = false;

}

System.Threading.TimerCallback timerDelegate =

new System.Threading.TimerCallback(this.LoadAllProcesses);

t = new System.Threading.Timer(timerDelegate,null,1000,1000);

}

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

 

}

 

private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e)

{

if(tabControl1.SelectedIndex == 1)

{

System.Threading.TimerCallback timerDelegate =

new System.Threading.TimerCallback(this.LoadAllMemoryDetails);

tclr = new System.Threading.Timer(timerDelegate,null,0,1000);

}

else

{

tclr.Dispose();

}

}

 

private void menuItem17_Click(object sender, System.EventArgs e)

{

if(menuItem17.Checked)

menuItem17.Checked = false;

else

menuItem17.Checked = true;

 

 

}

 

}

}


ПРИЛОЖЕНИЕ Б

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.