|
ok thanks
Fred.
There is no spoon.
|
|
|
|
|
Hi,
I am creating a window service in c# and when I starts the service at that time on some conditions I want to start the service. At that time I want to some error message and abort the service.
Please help me ASAP
Ankit Singhal
- ankit@earlysail.com
|
|
|
|
|
Services start before any login is possible. Normal applications do not start until a user logs in. A good solution would be to have your service start automatically (ServiceInstaller.StartType set to ServiceStartMode.Automatic ) and throw an exception from OnStart if the conditions are valid. Do not try to stop the service from within OnStart using the ServiceController . At this point the service controller database is still locked while startup code runs. If you try to stop it you will have a deadlock and any services scheduled to start after yours will not start - ever.
This posting is provided "AS IS" with no warranties, and confers no rights.
Software Design Engineer
Developer Division Customer Product-lifecycle Experience
Microsoft
[My Articles] [My Blog]
|
|
|
|
|
i have 2 applications , 1º is in windows service and the other is windows application.
i need to start, stop and pause service from windows application.
i have done that,but the problem is when i start the service, it works, when i stop the service, it wors. but when i try to start again the service, it does not work, i need to close the project and reopen and then it works again.
Please Help
|
|
|
|
|
Use this code...
System.ServiceProcess.ServiceController scm = new System.ServiceProcess.ServiceController ("MyService","MyServer");
//then to start it...
scm.Start();
//or to stop it...
scm.Stop();
You might have to create a new instance of the service control manager object each time you want to start or stop the service. I use this same code in a number of applications and have never had a problem with it.
Darryl Borden
Principal IT Analyst
dborden@eprod.com
|
|
|
|
|
this is my code in windows application, that calls the other project the windows application
class ServiceInstaller
{
#region Private Variables
private string _servicePath;
private string _serviceName;
private string _serviceDisplayName;
#endregion Private Variables
#region DLLImport
[DllImport("advapi32.dll")]
public static extern IntPtr OpenSCManager(string lpMachineName,string lpSCDB, int scParameter);
[DllImport("Advapi32.dll")]
public static extern IntPtr CreateService(IntPtr SC_HANDLE,string lpSvcName,string lpDisplayName,
int dwDesiredAccess,int dwServiceType,int dwStartType,int dwErrorControl,string lpPathName,
string lpLoadOrderGroup,int lpdwTagId,string lpDependencies,string lpServiceStartName,string lpPassword);
[DllImport("advapi32.dll")]
public static extern void CloseServiceHandle(IntPtr SCHANDLE);
[DllImport("advapi32.dll")]
public static extern int StartService(IntPtr SVHANDLE,int dwNumServiceArgs,string lpServiceArgVectors);
[DllImport("advapi32.dll",SetLastError=true)]
public static extern IntPtr OpenService(IntPtr SCHANDLE,string lpSvcName,int dwNumServiceArgs);
[DllImport("advapi32.dll")]
public static extern int DeleteService(IntPtr SVHANDLE);
[DllImport("kernel32.dll")]
public static extern int GetLastError();
#endregion DLLImport
public bool InstallService(string svcPath, string svcName, string svcDispName)
{
#region Constants declaration.
int SC_MANAGER_CREATE_SERVICE = 0x0002;
int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
//int SERVICE_DEMAND_START = 0x00000003;
int SERVICE_ERROR_NORMAL = 0x00000001;
int STANDARD_RIGHTS_REQUIRED = 0xF0000;
int SERVICE_QUERY_CONFIG = 0x0001;
int SERVICE_CHANGE_CONFIG = 0x0002;
int SERVICE_QUERY_STATUS = 0x0004;
int SERVICE_ENUMERATE_DEPENDENTS = 0x0008;
int SERVICE_START =0x0010;
int SERVICE_STOP =0x0020;
int SERVICE_PAUSE_CONTINUE =0x0040;
int SERVICE_INTERROGATE =0x0080;
int SERVICE_USER_DEFINED_CONTROL =0x0100;
int SERVICE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |
SERVICE_QUERY_CONFIG |
SERVICE_CHANGE_CONFIG |
SERVICE_QUERY_STATUS |
SERVICE_ENUMERATE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_CONTINUE |
SERVICE_INTERROGATE |
SERVICE_USER_DEFINED_CONTROL);
int SERVICE_AUTO_START = 0x00000002;
#endregion Constants declaration.
try
{
IntPtr sc_handle = OpenSCManager(null,null,SC_MANAGER_CREATE_SERVICE);
if (sc_handle.ToInt32() != 0)
{
IntPtr sv_handle = CreateService(sc_handle,svcName,svcDispName,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,svcPath,null,0,null,null,null);
if(sv_handle.ToInt32() ==0)
{
CloseServiceHandle(sc_handle);
return false;
}
else
{
//now trying to start the service
int i = StartService(sv_handle,0,null);
// If the value i is zero, then there was an error starting the service.
// note: error may arise if the service is already running or some other problem.
if(i==0)
{
//Console.WriteLine("Couldnt start service");
return false;
}
//Console.WriteLine("Success");
CloseServiceHandle(sc_handle);
return true;
}
}
else
//Console.WriteLine("SCM not opened successfully");
return false;
}
catch(Exception e)
{
throw e;
}
}
public bool UnInstallService(string svcName)
{
int GENERIC_WRITE = 0x40000000;
IntPtr sc_hndl = OpenSCManager(null,null,GENERIC_WRITE);
if(sc_hndl.ToInt32() !=0)
{
int DELETE = 0x10000;
IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
if(svc_hndl.ToInt32() !=0)
{
int i = DeleteService(svc_hndl);
if (i != 0)
{
CloseServiceHandle(sc_hndl);
return true;
}
else
{
CloseServiceHandle(sc_hndl);
return false;
}
}
else
return false;
}
else
return false;
}
public bool Installer(string svcName)
{
bool Ativo=false;
int GENERIC_WRITE = 0x40000000;
IntPtr sc_hndl = OpenSCManager(null,null,GENERIC_WRITE);
if(sc_hndl.ToInt32() !=0)
{
int DELETE = 0x10000;
IntPtr svc_hndl = OpenService(sc_hndl,svcName,DELETE);
if(svc_hndl.ToInt32() !=0)
{
System.ServiceProcess.ServiceController myController =
new System.ServiceProcess.ServiceController(svcName);
if (myController.CanStop)
{
Ativo=true;
}
}
}
CloseServiceHandle(sc_hndl);
return Ativo;
}
public void StopService(string svcName)
{
System.ServiceProcess.ServiceController myController =
new System.ServiceProcess.ServiceController(svcName);
if (myController.CanStop)
{
myController.Stop();
myController.Refresh();
}
myController.Dispose();
}
public void Dispose()
{
System.GC.Collect();
}
}
|
|
|
|
|
Why not just use the ServiceController class and save yourself most of the work? You can make half of this code disappear, making it much easier to support.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Can anyone give me an example of using WM_CALLWNDPROC hook or the WH_GETMESSAGE hook to capture the cut/copy/paste messages. Need a example without using a textbox contol in forms class but would like to use the API. A working program using this API would be great.
Thanks for the help
|
|
|
|
|
http://www.codeproject.com/cs/menu/TcMagicalEditMenu.asp
should be useful and for keyboard events
http://www.dotnetspider.com/technology/kbpages/1107.aspx
Hope this helps
Live Life King Size
Alomgir Miah
|
|
|
|
|
Thanks for it but need to capture the windows mouse cut/copy and paste events. The code project shows how to creat your own menus and the other needs a textbox control with the overiding WNDPROC messages. I may not have explained it clearly but i can capture keyboard inputs using the SetWindowsHookEx hook but am unable to capture the cut and paste events when using the mouse. I need a fully working example to do this.
|
|
|
|
|
I'm currently doing some work on extending an application and would greatly appreciate some pointers. Currently the application makes heavy use of rather big matrices of floats (approx. 2M elements). A matrix is used to represent a property for a set of relations. Let’s assume we have a base set of matrices that are read from disk at application startup. A matrix in this base set could for example represent the number of users of the relations, i.e., the value stored on index i,j within this matrix represents the number of users using relation i,j. My current task is to write a tool that will select relations using a criterion and the information stored within these base matrices. This basically comes down to first selecting relations based on their names (wildcards allowed) and then filter theses selections using the criterion and the matrices. An example could be to select all relations x, y with more than z users. The easiest way of doing this would obviously be to loop through all relations. However I get the distinct feeling that there must be a better way of doing this. Having rather limited experiences using DBs I would like to ask you if you think a DB could be beneficial?
|
|
|
|
|
In my opinion DBs are surely slower and less disk/ram space efficient.
I think also that 2M elements use at least *some* megabytes of memory.
Iterating over all the elems may waste much time, but if there is NO relation between, for example, adjacent elems in the matrix, it is, in my opinion, the only way...
You can use something like BinTrees, but the data MUST be structured in a some kind of ordered status.
[ITA] Tozzi ha ragione: Gaia si sta liberando di noi.
[ENG] Tozzi is right: Gaia is obliterating us.
|
|
|
|
|
Thanks for your quick reply. I am not entirely sure we have understood each other correctly, my explantion beeing anything but good. However, my interpretation of you answear is that looping over all relations and filtering out the interseting ones using the matrices in memory is likely to be more efficient than placing the same information in a DB and retrieve them from there?
|
|
|
|
|
I'm not really clear on how your data is organized, or what you use it for, but I think that putting it in a database could really improve performance.
A database is built to extract information from large collections of data based on certain criterias. That sounds very much like what you are trying to do.
The example you mention where you group elements and select groups on the number of users, can easily be achieved with a single database query. And there is quite a lot of work put into the database to make these operations fast, so you might have a hard time to write anything that can match it.
---
b { font-weight: normal; }
|
|
|
|
|
Thanks for your reply. You are right, I should not try to reinvent the wheel. =)
|
|
|
|
|
I paint the form on form_paint event. Form has some labels.when i paint the form, labels r still systemcolors.control colored. what can i do to force them changing theirs colors. The Transparency Background is not working on Desktop forms.
|
|
|
|
|
you should use a panel to paint into it...
anyway, you have to change the labels background color manually, for example setting it to Color.Transparent
[ITA] Tozzi ha ragione: Gaia si sta liberando di noi.
[ENG] Tozzi is right: Gaia is obliterating us.
|
|
|
|
|
When i set labels background to Transparency , IDE says "This control doesnt support"
and i think there must be better way to achive this than adding panels to form.
|
|
|
|
|
hi
how import the dll of vc++ or c++ in c#, and how to use the function of that dll in c#.
plz reply me as soon as possible.
bye
|
|
|
|
|
first you have to know the exact signature of the functions you want to use.
See MSDN about the [DllImport] attribute. Here an example:
suppose you want to import the following function
int computeVal(int v)
that is inside YourDll.dll
in C# you should write:
[DllImport("YourDll")]
static int computeVal(int v);
I don't remember if {} is needed before the semicolon.
Please note that .NET Framework manages the data type marshalling automatically, but sometimes (very rarely) it may fail...
[ITA] Tozzi ha ragione: Gaia si sta liberando di noi.
[ENG] Tozzi is right: Gaia is obliterating us.
|
|
|
|
|
Hi
I was about to design a form witha datgrid and some buttons with certain operations namely first, previous ,next and last and some text boxes
I have to read two xml file( each xml file has one table)with data in it.
Now I have to create a relation between the two tables and display it in the datagrid.
Now using databinding I have to show the data from the datagrid columns to each text box
when teh next, previous ...etc buttons r clicked.
that is values from one column
for ex:
column name :DESC
values :MR BROS, VT BROS, CT BROS
when next is clicked, the values should be shown from the desc in to the textbox one by one.
This i have did it
this is the folowing code
private DataSet ds = new DataSeyt();
retrieve button click
private void RetrieveButton_Click_1(object sender, System.EventArgs e)
{
DataSet xml1 = new DataSet();
xml1.ReadXml("C:\\CDEV\\Relation\\cost_code.xml");
DataTable dt1 = xml1.Tables["cost_code"].Copy();
DataSet xml2 = new DataSet();
xml2.ReadXml("C:\\CDEV\\Relation\\cost_type.xml");
DataTable dt2 = xml2.Tables["cost_type1"].Copy();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
DataColumn parentCol = ds.Tables["cost_type1"].Columns["cost_type"];
DataColumn childCol = ds.Tables["cost_code"].Columns["cost_type"];
DataRelation relTable1Table2;
relTable1Table2 = new DataRelation("cost_typecost_code", parentCol, childCol);
ds.Relations.Add(relTable1Table2);
this.dataGrid1.DataSource = ds.Tables["cost_type1"];
fnDataBindingforTextBoxes();
fnSetCurrencyManager();
}
private void fnDataBindingforTextBoxes()
{
this.ultraCostPaid.DataBindings.Add("Text", ds.Tables["cost_code"],"desscost_paid_by_us");
this.ultraCostType.DataBindings.Add("Text", ds.Tables["cost_code"],"cost_type");
}
private void fnSetCurrencyManager()
{
currManager=(CurrencyManager)this.BindingContext[ds.Tables["cost_code"]];
}
everything is working fine
but databinding on the grid is not used. that is if u select a row from the datagrid it should change the values in the textbox that i have already added data bindings for. if u notice just selct a row from the grid, now the values in that row should show in your textboxes you have put below.
Give a dataview for dataset
pls help me to do this
j o hn
|
|
|
|
|
How can you determine if a string is in fact a valid filename for the system I am on?
What i want to do is have a textbox where a user can edit a string, and then opening a save dialog where the text from the textbox shall be proposed as the name of the file, provided it is a valid filename. Otherwise I want to propose a standard default filename for him/her.
any ideas? I tried to use the path class and call one of it's static members since the documentation seems to say that all static members of Path check this for you. This does not seem to be the case however since I do not get an exception from for example Path.IsPathRooted(path), but when calling the showdialog() for the SaveFileDialog I get the argumentexception...
/Bjørn
|
|
|
|
|
|
I have a problem when using Combobox in C#. I know that in Foxpro, we can display more than one columns in the Combobox. Can we do this in C#?
Help me please!
|
|
|
|
|
|