I got a c# windows service which starts an app using this method: http://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-32-and-64-bit-Archite
This app starts another hidden c# console app which just sends a picture to connected printer and terminates.
The problem is that the second app doesn't work in this case.
If the first app started not from the service everything works fine. If the first app started by the service, printing fails with a strange error about not having anough paper or something.
So this means that the printing app is being started somehow differently. Does anyone have a clue what's going on and how to debug it?
Thanks.
Related
This question already has answers here:
How to keep a .NET console app running?
(9 answers)
Closed 6 years ago.
I have developed a console app which must run in the background. The app must constantly check a database for new records. If new records are returned they are processed. My app as it currently stands uses while(true) to keep the application running. Is using a while loop the best solution.
A snippet of my code:
static void Main(string[] args)
{
while(true)
{
// Query db for new records
if(record_count > 0)
{
// Process the records
}
Thread.Sleep(500);
}
}
Create as Windows Service Application
What a Windows Service is ?
Enables you to create long-running executable applications that run in their own windows session.
Can be automatically started when the computer boots, can be paused and restarted without any user interaction.
Easily installable by running the command line utility InstallUtil.exe and passing the path to the service's executable file.
Why a Windows Service?
One of the most common requirements of some businesses is long-running scheduled jobs based on some time interval. For example: sending a newsletter everyday afternoon or send an email alert to the customer for every one hour.
So building a Windows Service could be one of the reliable solutions to do the goal that can do the required job in the behind the scenes without interfering others users on the same computer.
Please refer the link for step by step implementation -
http://www.c-sharpcorner.com/UploadFile/naresh.avari/develop-and-install-a-windows-service-in-C-Sharp/
Your approach to keep your console application continuously running is absolutely fine. Only thing is that you want to keep it running in background silently without user to know anything. Since a console app has a windowed UI (a command console) the user will keep seeing it. Here is what you can do to get rid of command console. Since you already have your console application with you, here is what you need to do :
Go to project properties -> Go to application Tab -> Change the Output type to Windows Application
Phew! Now your same console application will run without a command console and your code will keep running.
Creating a windows service will be too much of a kill for such a simple logic. Also installing a windows service is an extra overhead, though I am not aware of the deployment you are looking forward to for your application in production.
Better option would be to use Windows service that run in background.
Creating a Windows Service Application
Develop and Install a Windows Service in C#
Just google and you can find lots of article and tutorial on Windows Service.
There is no need to make your program running as a services. Services aren't for these small tasks. You should simply create a Windows (GUI, WinForms) application with a hidden window. Or, just don't create a window and just keep the Main running. Main would launch a thread and would itself wait for that thread.
A service has to be installed as a service and not all users would have permission to do that. It is complex task to have service, manage it, have security attributes settled et. al.
The hidden application can simply run in current user account (the service would be running in high-privilege SYSTEM or NETWORK account). Your application won't demand any privilege from current user - it just need SQL database/table read access.
Create a windows service which will check if your console app is running. If console app is down, then windows service will execute it again.
Don't write your console app's code into windows service. Because if it will start automatically at windows start up, then it may not work correctly as your console app.
I have a strange situation. My windowsphone 8 app build with Xamarin and MvvmCross runs perfect from my debugger (visual studio).
Then I submit the app to the app store (beta store by the way). After that I downloaded it on my device and started the app. The splashscreen shows off... but thats it (I waited for about 5 minutes). No crash and no other information about what happens.
When I then go back with my backbutton or my start-button and restart the app. Everything works fine. This situation only occurs on the first time I start my app after downloading from the store.
Question: Is there someone with same issues?
Question: Is there a tool or something which I can use to log the device to get some more information?
Thank you
Assuming you are submitting to the Windows Phone App Store and the OS on the phone running the app is greater than v7.0.7355., you should be able to retrieve the crash dump data from the Windows Phone Dev Centre.
This will only cover crashes within an application and not the underlying OS code.
For more information see: Crash count reports
Check you don't have any code in the debug-only section of the App.xaml.cs
e.g. if your init code sits inside a block starting if ( Debugger.IsAttached )
I have a bat file in which I have called a simple console application in c#. Whenever I run the bat file it displays the console and run. Can any one tell me how to run bat file as windows service so that to avoid this
I think this is what you're looking for:
Running a C# console application as a Windows service
It's not straightforward due to the fact that console app doesn't automatically qualify as a service, you will have to do some coding.
By the sound of your post though it seems as if you initially wanted to build a service in the first place, in that case, start from scratch and make a Windows service.
We have a automated printing service running as System account printing web urls.
The idea is using WebBrowser to load page and call Print upon it finished loading.
This works fine on Server 2003 , 2008r2 etc but does not work on Server 2012 ONLY IF it was running as a service. running as a console application works fine.
The problem:
It would load web pages fine and would call Print() , Print() will return but nothing gets printed on the default printer: no print job at all.
I thought it would be account problem so I tried to run service as the same logged on user but still does not work, if that user run application as console app then it would work fine. So default printer and user account get ruled out.
I don't think it is a code problem (it must be though) as it works for older Windows versions running as service.
It seems something fundamental got changed for a service process in server 2012.
Update 1. It may relates to How do I print an HTML document from a web service?
However it works fine for me prior server 2012.
Update 2. It does not work even the whole print happens in a separate process, i.e. my service launches a process to do print, it does not work either. Everything works fine if I run same code in console mode. It is definitely not a threading problem but rather something deep in server 2012.
Now the questions are:
What is changed? Why it stopped working?
At http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/fdcfa0fa-50aa-4a61-be79-5b4c8f65fbf7/ we see that this was reported to Microsoft and confirmed as a bug in Windows 8 and Windows Server 2012.
This bug is triggered when trying to print from a 32bit process in non-standard user session (like e.g. a service).
According to Microsoft, this a bug was resolved in Windows 8.1 and Windows Server 2012 R2. However, we could still reproduce it on Windows 8.1.
On the same site, a workaround is given by Microsoft. This workaround solved the problem for us on Windows 8.1. It probably also works on Windows 8 and Windows Server 2012.
The workaround goes as follows:
Open Regedit and go to HKEY_CLASSES_ROOT\CLSID{BA7C0D29-81CA-4901-B450-634E20BB8C34}
Check the value of the "AppID" Registry Entry. In our case this was {AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0}
Now go to HKEY_CLASSES_ROOT\AppID{AA0B85DA-FDDF-4272-8D1D-FF9B966D75B0} (or the respective value you found on your system)
Under this registry key, delete the entries with the name "AccessPermission", "LaunchPermission" and "RunAs"
Since this is a bug in Windows, you cannot fix it in your code. The workaround might have side effects, but we haven't seen any so far in our scenario.
I am trying to start a console application from a .NET Windows Service. The service is running on a Windows 2008 server.
I use Process.Start to run the console application and it runs( I can see it in the task mgr), but I never get the process id back and the call to Process.Start just hangs.
If I run the same service from my Windows 7 machine the process runs and I get the process Id back no problem.
I am confused ..
I had exactly this same problem. For me the key was to set StartInfo.UseShellExecute = false;
Is it possible that the process you are spawning is attempting to prompt the window station for user input? In which case it could hang...
Which process are you starting? Is it part of the platform/OS (like cmd.exe) or something custom?
After a long time search for a solution for this, I found the wise stones for my problem.
I made a new WindowsForm based program, with same Process.Start command, and then the standard "Windows Warning Security" dialog box shows up, and thats why it dosent work.
After turn off "User Access Control" the Windows Service works correctly.