Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment 为什么我的CE应用程序拒绝运行?_Deployment_Compact Framework_Windows Ce_Smart Device_Handhelddevice - Fatal编程技术网

Deployment 为什么我的CE应用程序拒绝运行?

Deployment 为什么我的CE应用程序拒绝运行?,deployment,compact-framework,windows-ce,smart-device,handhelddevice,Deployment,Compact Framework,Windows Ce,Smart Device,Handhelddevice,我已经维护了一段时间(一年多)的Windows CE应用程序,并不时制作新版本,将其复制到手持设备上并在那里运行新版本 不过,今天我第一次创建了一个新的Windows CE应用程序。这是一个非常简单的实用程序 为了在VS2008中创建它,我选择了一个C#“智能设备项目”模板,添加了一些控件和一些代码,并构建了它 以下是我选择的一些选项: 我将通过构建项目生成的.exe复制到手持设备的Program Files文件夹: …但它不会运行。它在错误的位置吗?是否需要复制一些辅助文件?是否需要进行其

我已经维护了一段时间(一年多)的Windows CE应用程序,并不时制作新版本,将其复制到手持设备上并在那里运行新版本

不过,今天我第一次创建了一个新的Windows CE应用程序。这是一个非常简单的实用程序

为了在VS2008中创建它,我选择了一个C#“智能设备项目”模板,添加了一些控件和一些代码,并构建了它

以下是我选择的一些选项:

我将通过构建项目生成的.exe复制到手持设备的Program Files文件夹:

…但它不会运行。它在错误的位置吗?是否需要复制一些辅助文件?是否需要进行其他类型的设置才能使其运行?还是什么

更新 由于内容不多,我将粘贴以下所有代码,以防有人认为我的代码可能是问题:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace PrinterCommanderCE
{
    public partial class PrinterCommanderForm : Form
    {
        public PrinterCommanderForm()
        {
            InitializeComponent();
        }

        private void btnSendCommands_Click(object sender, EventArgs e)
        {
            SendPrinterCommands();
        }

        private void SendPrinterCommands()
        {
            bool successfulSend = false;
            const string quote = "\"";
            string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
            string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{0}", quote);
            string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}", quote);
            string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}", quote);

            if (radbtnBar.Checked)
            {
                successfulSend = SendCommandToPrinter(advanceToBlackBar);
            }
            else if (radbtnGap.Checked)
            {
                successfulSend = SendCommandToPrinter(advanceToGap);
            }
            if (successfulSend)
            {
                MessageBox.Show("label type command successfully sent");
            }
            else
            {
                MessageBox.Show("label type command NOT successfully sent");
            }

            if (ckbxPreventShutoff.Checked)
            {
                successfulSend = SendCommandToPrinter(keepPrinterOn);
            }
            else
            {
                successfulSend = SendCommandToPrinter(shutPrinterOff);
            }
            if (successfulSend)
            {
                MessageBox.Show("print shutoff command successfully sent");
            }
            else
            {
                MessageBox.Show("print shutoff command NOT successfully sent");
            }
        }

        private bool SendCommandToPrinter(string cmd)
        {
            bool success = false;
            try
            {
                SerialPort serialPort = new SerialPort();
                serialPort.BaudRate = 19200;
                serialPort.Handshake = Handshake.XOnXOff;
                serialPort.Open();
                serialPort.Write(cmd);
                serialPort.Close();
                success = true;
            }
            catch
            {
                success = false;
            }
            return success;
        }

    }
}
更新2 基于,我在应用程序中添加了一个全局异常处理程序,因此Program.cs现在是:

namespace PrinterCommanderCE
{
    static class Program
    {
        [MTAThread]
        static void Main()
        {
            AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.UnhandledException += new UnhandledExceptionEventHandler(GlobalExceptionHandler);

            Application.Run(new PrinterCommanderForm());
        }

        static void GlobalExceptionHandler(object sender, UnhandledExceptionEventArgs args)
        {
            Exception e = (Exception)args.ExceptionObject;
            MessageBox.Show(string.Format("GlobalExceptionHandler caught : {0}", e.Message));
        }
    }
}
然而,运行新版本并没有显示什么——它只是在杰克·鲁比的友好访问之后,以几乎和李·哈维·奥斯瓦尔德一样的冗长瞬间“闪现”

更新3 问题是否与此有关?如果是,如何解决

我的更新版本和这个全新简单的应用程序都拒绝运行,这表明在编码、构建或部署过程中存在一些根本性的缺陷

更新4 由于这是一个最小的实用程序,它(以及我的遗留应用程序,涉及的更多)无法工作的原因可能与项目属性、它是如何构建的、所需的文件没有被复制,或者

注意:桌面图标为“通用”(看起来像一个空白的白色表单);这可能表明存在问题,但这是错误的指示,还是一个次要(仅限于美学)问题

更新5 在项目>属性…,平台设置为“活动(任何CPU)”,平台目标相同(“活动(任何CPU)”)

我读到这是错误的,它应该是“x86”,但没有“x86”选项可用-任何CPU都是唯一的

更新6 在项目>属性中…>在设备上,选中“部署最新版本的.NET Compact Framework(包括Service Pack)”。这是应该的吗

更新7 好吧,这是这一切中最奇怪的部分:

我有两个CF/CE应用程序需要在这些摩托罗拉/Symbol 3090和3190手持设备上运行

一个是上面讨论的简单实用程序。我发现它确实在其中一个设备上运行(3190,FWIW)。因此,它在一台设备上运行,而不是在另一台设备上运行

然而,另一个(legacy.exe)则相反——它运行在3090上(该实用程序甚至不会启动),但不会运行在3190上

因此,3190满足了实用程序的需求,3090满足了遗留util的需求。但是,新版本的旧版应用程序不会在任何一台设备上运行

我很困惑;当我谈到他的三个接球手中的一个时,我的感觉是肯定的:“我有一个能投但不能接,一个能接但不能投,还有一个能打但两者都不能做。”

更新8 3190安装了更新版本的CF;新的和旧的应用程序似乎都应该在新的设备上运行,并且有更新的CE,但是它们没有-只有针对新框架构建的应用程序才有

更新9 以下是3090的外观:

更新10 所以我有两个前任,一个在设备上运行(现在两个),另一个在两个设备上都不会运行。这两个exesw看起来几乎相同。我将它们与三种工具进行了比较:红门网反射器;JetBrains的dotPeek和Dependency Walker

以下是我的发现:

Dependency Walker 两者似乎在缺少依赖项方面都有相同的错误(我没有将它们与它们的依赖程序集放在同一文件夹中,这可能是问题所在)

.NET反射器 非工作文件具有工作文件没有的条目:

[assembly: Debuggable(0x107)]
这是问题所在吗?如果是,我该如何改变

JetBrains dotPeek exe工作副本中的引用均为版本1.0.50000.0

非工作exe具有相同的引用列表和相同的版本号

但有一点不同:

对于working.exe,dotPeek说,“1.4.0.15,msil,Pocket PC v3.5” 对于不工作的.exe,dotPeek说,“1.4.0.15,msil,.NETFramework v4.5

这就是问题所在吗?如果是,我如何更改非工作的.exe以匹配工作的

最后一个是令人不安的,主要是因为我在项目的非工作(较新)版本中没有看到“4.5”字符串存在的地方。dotPeek从哪里得到这些信息

更新11 我现在知道问题出在这两个MessageBox.Show()之间,因为我看到的是第一个,而不是第二个:

public static int Main(string [] args)
{
    try
    {
        // A home-brewed exception handler (named ExceptionHandler()) is already defined, but I'm adding a global one
        // for UNHANDLED exceptions (ExceptionHandler() is explicitly called throughout the code in catch blocks).
        MessageBox.Show("made it into Main method"); // TODO: Remove after testing <= this one is seen
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.UnhandledException += new UnhandledExceptionEventHandler(GlobalExceptionHandler);

        string name = Assembly.GetExecutingAssembly().GetName().Name;
        IntPtr mutexHandle = CreateMutex(IntPtr.Zero, true, name);
        long error = GetLastError();

        if (error == ERROR_ALREADY_EXISTS)
        {
            ReleaseMutex(mutexHandle);

            IntPtr hWnd = FindWindow("#NETCF_AGL_BASE_",null);
            if ((int) hWnd > 0)
            {
                SetForegroundWindow(hWnd);  
            }
            return 0;
        }

        ReleaseMutex(mutexHandle);

        DeviceInfo devIn = DeviceInfo.GetInstance();

        Wifi.DisableWifi();

        // Instantiate a new instance of Form1.
        frmCentral f1 = new frmCentral();
        f1.Height = devIn.GetScreenHeight(); 
        f1.Text = DPRU.GetFormTitle("DPRU HHS", "", "");

        MessageBox.Show("made it before Application.Run() in Main method"); // TODO: Remove after testing <= this one is NOT seen
        Application.Run(f1);

        devIn.Close();

        Application.Exit();
        return 0;
    }
    catch(Exception ex)
    {
        DPRU.ExceptionHandler(ex, "Main");
        return 0;
    }
} // Main() method
publicstaticintmain(字符串[]args)
{
尝试
{
//已经定义了一个自制的异常处理程序(名为ExceptionHandler()),但我正在添加一个全局异常处理程序
//对于未处理的异常(在catch块中的整个代码中显式调用ExceptionHandler()。
MessageBox.Show(“使其成为主方法”);//TODO:测试后删除0)
{
setforegroundindow(hWnd);
}
返回0;
}
释放互斥(mutexHandle);
DeviceInfo devIn=DeviceInfo.GetInstance();
Wifi.DisableWifi();
//实例化Form1的新实例。
frmCentral f1=新的frmCentral();
f1.Height=devIn.GetScreenHeight();
f1.Text=DPRU.GetFormTitle(“DPRU-HHS”,“”,“”);
MessageBox.Show(“在主方法中的Application.Run()之前创建”);//TODO:Remove