C#控制台应用程序在Windows Server上无法正常工作(在win XP和win 7上正常工作)

时间:2012-09-03 10:04:55

标签: c# windows

我在为windows server 2008 R2.

申请时遇到了很大的问题

该应用程序适用于.NET framework 3.5,据我所知,Windows Server 2008 R2包含这样的框架。

应用程序本身非常庞大,它是一个服务器程序,用于通过条形码扫描程序注册员工的工作时间,然后将其存储在。xml文件中,它也会每隔几个文件从update.xml文件更新一次分钟。

为了避免让这个应用程序成为焦点,我总是使用一些方法来捕获按键而不关注应用程序。

所以基于我的问题,应用程序正常启动,它也正确地读取代码并识别它们,但是应用程序显然遇到“break:”和“return”的问题,并且它根本没有启动我的程序里面的方法。 (这是简单的静态void方法,没有任何参数)

我是否必须重写整个程序才能在不调用方法和所有中断和返回的情况下使其工作?或者问题是什么。这对我来说非常重要,截止日期或多或少都是今天。我还可以补充一点,这个应用程序在其他PC上运行得非常好,当我在我的电脑上调试它时,它也可以正常工作。

我不会在这里发布完整的代码,它太庞大了,但我可以发布它的一部分来帮助你们。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
using System.Threading;
using System.Data;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Reflection;
using System.Security.AccessControl;

    static void Main()
    {
        var handle = GetConsoleWindow();
        ShowWindow(handle, SW_HIDE);
        appPath = Path.GetDirectoryName(Application.ExecutablePath);

        if (AutoStarter.IsAutoStartEnabled == false)
        {
            AutoStarter.SetAutoStart();
        }

        if (!Directory.Exists(appPath+"\\Raporty"))
        {
            Directory.CreateDirectory(appPath + "\\Raporty");
        }

        if (!File.Exists(appPath+"\\settings.jsn"))
        {
        utworzsetting();
        }
        sprawdzostatniawersje();
        uaktualnij();
        _hookID = SetHook(_proc);
        Application.Run();
        UnhookWindowsHookEx(_hookID);
     }





    private delegate IntPtr LowLevelKeyboardProc(
    int nCode, IntPtr wParam, IntPtr lParam);





    private static IntPtr HookCallback(
        int nCode, IntPtr wParam, IntPtr lParam)
    {
        if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
        {
            int vkCode = Marshal.ReadInt32(lParam);

            switch (vkCode)
                {
                   case 48:
                     wiersz = "";
                     break;
                   case 49:
                     wiersz += "1";
                     break;
                   case 50:
                     wiersz += "2";
                     break;
                   case 51:
                     wiersz += "3";
                     break;
                   case 52:
                     wiersz += "4";
                     break;
                   case 53:
                     wiersz += "5";
                     break;
                   case 54:
                     wiersz += "6";
                     break;
                   case 55:
                     wiersz += "7";
                     break;
                   case 56:
                     wiersz += "8";
                     break;
                   case 57:
                     wiersz += "9";
                     break;
                   case 13:
                     if (wiersz != null)

一些“如果”的

最后

                             if (aktualneID != -1) // Jezeli ID znajduje sie bazie danych
                         {
                             // MySettings settings = MySettings.Load(appPath + "\\settings.jsn");
                             if (settings.limit == true && lPracownik[aktualneID].Dni.Count != 0)
                             {
                                 czymoze();
                                 if (niemoze == false)
                                 {
                                     Console.WriteLine("z limitem");
                                     asdf();
                                     Console.WriteLine("nie wywolalem metody");
                                 }
                             }
                             else
                             {
                                 Console.WriteLine("bez limitu");
                                 asdf();
                                 Console.WriteLine("nie wywolalem metody");
                             }
                         }
                     }
                            wiersz = "";
                            zapiszbaze();
                     break;
                   default:
                     break;

这就是问题所在,应用程序到了这个时刻"Console.WriteLine("bez limitu");"就是这样,它不会启动“asdf”方法,它也不适用于wiersz =“”;

如果您有任何疑问,我将不胜感激,希望我指出一些事情。

PS。我正在使用VS 2010 Express,如果您认为可以帮助我,我可以向您发送完整的解决方案。

1 个答案:

答案 0 :(得分:1)

问题解决了,它是.NET框架故障,我在服务器上重新安装它,一切都像魅力一样。