deployment - मेरी सीई ऐप क्यों चलने से इंकार कर रही है?




compact-framework windows-ce (2)

क्या आप इसे डिबगर के अंदर चलाने की कोशिश कर सकते हैं और जांच सकते हैं कि यह विफल क्यों है? क्या आप प्रोग्राम की शुरूआत में एक ब्रेकपॉइंट रख सकते हैं और जांच कर सकते हैं कि क्या यह पहुंचा है? डीबग आउटपुट आपको कुछ रोचक संकेत भी दे सकता है

https://code.i-harness.com

मैं कुछ समय से (एक वर्ष से अधिक) कुछ समय के लिए विंडोज सीई ऐप को बनाए रख रहा हूं और समय-समय पर इसके नए संस्करणों का उत्पादन किया है, उन्हें हाथ में डिवाइस [कॉपी] में कॉपी करने और वहां नए संस्करणों को चलाने के लिए।

आज, हालांकि, मैंने पहली बार एक नया विंडोज सीई ऐप बनाया है। यह एक बहुत सरल उपयोगिता है

इसे वीएस 2008 में बनाने के लिए, मैंने सी # "स्मार्ट डिवाइस प्रोजेक्ट" टेम्पलेट का चयन किया, कुछ नियंत्रण और कोड का एक बिट जोड़ा, और इसे बनाया

मेरे द्वारा चुने गए कुछ विकल्प यहां दिए गए हैं:

मैंने प्रोजेक्ट को हेडहेल्ड डिवाइस के प्रोग्राम फाइल फ़ोल्डर के माध्यम से निर्मित .exe की प्रतिलिपि बनाई है:

... लेकिन यह नहीं चलेगा क्या यह गलत स्थान में है? क्या उसे कुछ सहायक फाइलों की आवश्यकता है? क्या इसे चलाने के लिए कुछ अन्य प्रकार की सेटअप की आवश्यकता है? और क्या?

अद्यतन करें

चूंकि इसमें बहुत कुछ नहीं है, इसलिए मैं नीचे दिए गए सभी कोडों को चिपकाने में हूं क्योंकि कोई सोचता है कि मेरा कोड समस्या हो सकता है:

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 अद्यतन करें

इस पर आधारित, मैंने ऐप में एक वैश्विक अपवाद हैंडलर जोड़ा है, ताकि प्रोग्राम.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 अपडेट करें

प्रोजेक्ट> प्रॉपर्टी ... में, प्लेटफ़ॉर्म "सक्रिय (कोई भी सीपीयू)" पर सेट है और प्लेटफ़ॉर्म उसी ("सक्रिय (कोई भी सीपीयू)" लक्ष्य को लक्षित करता है)

मैंने पढ़ा है कि यह गलत है, कि यह "x86" होना चाहिए, लेकिन "x86" विकल्प उपलब्ध नहीं है - कोई भी सीपीयू केवल एक ही है ...?!?!

6 अपडेट करें

प्रोजेक्ट> गुण ...> डिवाइस में, " .NET कॉम्पैक्ट फ्रेमवर्क (सर्विस पैक सहित) का नवीनतम संस्करण " परिनियोजित करें "चेक किया गया है। क्या ऐसा होना चाहिए?

7 अपडेट करें

ठीक है, यहां यह सब सचमुच अजीब है:

मेरे पास दो सीएफ़ / सीई एप्स हैं जिनके लिए मुझे इन मोटोरोला / सिंक 3090 और 3190 हैंडहेल्ड डिवाइसेस पर चलाना होगा।

एक यह सरल उपर्युक्त ऊपर चर्चा की गई है। मुझे लगता है कि यह वास्तव में एक उपकरण (3190, एफडब्ल्यूआईडब्ल्यू) पर चल रहा है। तो यह एक डिवाइस पर चलता है, लेकिन दूसरे पर नहीं

फिर भी, अन्य (विरासत)। एक्सई विपरीत है - यह 30 9 0 (जहां उपयोगिता भी शुरू नहीं होगी) पर चलता है, लेकिन 3190 पर नहीं।

इसलिए उपयोगिता की जरूरतों को 3190 तक पूरा किया जाता है, और विरासत उपयोग की आवश्यकताओं को 30 9 0 तक पूरा किया जाता है। हालांकि, लीगेसी एप का नया संस्करण किसी भी उपकरण पर नहीं चलता है!

मैं चकित हूँ; मुझे लगता है केसी स्टेनगेल को जब उनके तीन पकड़ने वालों में से एक बार बोलना चाहिए: " मुझे वह मिला जो फेंक सकता है, लेकिन पकड़ नहीं सकता, जो पकड़ सकता है, लेकिन फेंक नहीं सकता, और जो हिट कर सकता है, लेकिन जो भी नहीं कर सकता। "

8 अपडेट करें

3190 में स्थापित सीएफ़ का एक नया संस्करण है; ऐसा लगता है कि नए और पुराने एप्लिकेशन दोनों नए सीई के साथ नए डिवाइस पर चलना चाहिए, लेकिन वे नहीं करते - केवल नए रूपरेखा के खिलाफ निर्मित / नया फ्रेमवर्क करता है ...

9 अपडेट करें

30 9 0 जैसा दिखता है:

10 अपडेट करें

इसलिए मेरे पास दो exes, डिवाइस पर चलाता है जो एक (उन दोनों को अब), और अन्य जो उपकरणों के न तो चलेंगे दोनों उदाहरण लगभग समान लग रहे हैं। मैंने उनसे तीन टूल के साथ तुलना की: रेड गेट्स '.NET रिफ्लेक्टर; JetBrains 'डॉटपएक, और निर्भरता वाकर।

जो मुझे मिला वह यहां है:

निर्भरता वाकर दोनों में निर्भरताएं लापता होने के बारे में समान त्रुटियां हैं (मेरे पास एक ही फ़ोल्डर में उनके निर्भर असेंबलियों के साथ संभवतः वहाँ समस्या नहीं थी)

.NET रिफ्लेक्टर nonworking फ़ाइल में इस प्रविष्टि की कार्यशील फ़ाइल नहीं है:

[assembly: Debuggable(0x107)]

क्या यह समस्या है और, यदि हां, तो मैं इसे कैसे बदल सकता हूं?

JetBrains dotPeek exe की कार्य प्रतिलिपि में संदर्भ सभी संस्करण 1.0.50000.0 हैं

गैर-कार्यरत exe के संदर्भों की एक समान सूची है, और उसी संस्करण संख्या।

हालांकि यह अंतर है:

काम करने के लिए। Exe, dotPeek कहते हैं, " 1.4.0.15, एमएसआईएल, पॉकेट पीसी v3.5 " गैर-कार्यरत .exe के लिए, डॉटपेक कहते हैं, " 1.4.0.15, एमएसआईएल, नेट फ्रेमवर्क v4.5 "

क्या यह समस्या है और, यदि हां, तो मैं काम करने वाले को मिलाने के लिए गैर-कार्यरत। Exe कैसे बदल सकता हूँ?

यह अंतिम चिंता का विषय है, मुख्यतः क्योंकि मुझे प्रोजेक्ट के गैर-कार्य (नया) संस्करण में कोई स्थान नहीं दिखाई देता है जहां "4.5" स्ट्रिंग मौजूद है। डॉट पीक की जानकारी कहां मिल सकती है?

11 अपडेट करें

मुझे अब पता है कि समस्या इन दोनों संदेशबॉक्स के बीच कहीं है। दिखाएँ () एस, क्योंकि पहले मैं देख रहा हूं, लेकिन दूसरा नहीं:

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

12 अपडेट करें

अधिक विशेष रूप से, मुझे किसी भी तरह से असीम पाशन हो रहा है; हैंडहेल्ड डिवाइस पर "एंट" की गोली मारकर (यह वही है जो बटन जैसा दिखता है - एक "रसीन") - यह गैर्बिल्स टैप-डांस (जैसे डिबगिंग मेसेजबॉक्स। शो () डीबगिंग के रूप में दो तरीकों पॉप अप करता है और इसे खत्म कर दिया जाता है और अन्तराल विज्ञापन (शाब्दिक रूप से nauseum) पर।


यदि कोई एप्लिकेशन प्रारंभ नहीं होता है तो यह कुछ खास नहीं है जैसा कि आप WindowsCE और CF3.5 के लिए संकलित हैं, कॉम्पैक्ट फ्रेमवर्क 3.5 रनमुंडों को WindowsCE डिवाइस पर स्थापित करना होगा। आम तौर पर कॉम्पैक्ट फ्रेमवर्क विंडोज सीई छवियों का एक हिस्सा है, कम से कम संस्करण 1.0, लेकिन कौन आपके परीक्षण डिवाइस के लिए जानता है? यदि कम से कम एक सीएफ़ स्थापित किया गया है, तो एक ऐप को एक नया सीएफ़ संस्करण की आवश्यकता होगी, यह दिखाएगा कि मिस्ड संस्करण के बारे में बताए गए संदेश के शुरू होने पर तो या तो कोई सीएफ़ आपके डिवाइस पर नहीं है, या कुछ गड़बड़ असली गलत है

डिवाइस पर स्थापित सीएफ़ संस्करण की जांच करने के लिए आप \ Windows \ cgacutil.exe चला सकते हैं। उपकरण स्थापित सीएफ़ का संस्करण दिखाएगा।

आप एक टीसीपी / आईपी कनेक्शन या ActiveSync कनेक्शन का उपयोग कर डिबग कर सकते हैं। स्टैक ओवरफ्लो में कहीं और रिमोट डीबगिंग देखें, मैंने टीसीपी / आईपी के माध्यम से रिमोट डिबग के बारे में लंबे समय से एक प्रश्न पूछा था या आपके डिवाइस में यूएसबी और डब्ल्यूएलएएन या एनईईटी नहीं है?

अपडेट: टीसीपी / आईपी के माध्यम से रिमोट डिबग के लिए इसका जवाब यहां दिया गया है: वीएस -2008 दूर से मोबाइल 6.1 डिवाइस से कनेक्ट हो सकता है यह "प्रोजेक्ट> प्रॉपर्टीज ...> डिवाइसेज में" दूरस्थ "तैनाती को सक्षम करेगा," .NET के नवीनतम संस्करण परिनियोजित करें कॉम्पैक्ट फ्रेमवर्क (सर्विस पैक सहित) "की जाँच की गई है। क्या ऐसा होना चाहिए?"

क्या आपके द्वारा लिखे गए पहले के ऐप्स भी लिखे गए हैं? NET? कॉम्पैक्ट ढांचे को प्रोसेसर आर्किटेक्चर के बारे में परवाह नहीं है, केवल सीएफ़ रनटाइम को प्रोसेसर से मेल खाना चाहिए। इसलिए आपको x 86 लक्ष्य की आवश्यकता नहीं है जैसे कि आप मूल सी / सी ++ स्मार्टडिवाइस परियोजना लिखते हैं।

आपकी टिप्पणियों के लिए: ए) सीएफ 1.0 डिवाइस पर स्थापित है। बी) सहकर्मियों के कंप्यूटर पर बनाया गया एक्सई सीएफ़ 1 के लिए बनाया गया लगता है और इसके लिए ओके चलाता है। सी) आपका सीई 3.5 सीएफ़ के लिए बनाया गया है और डिवाइस पर सीएफ 3.5 रनटाइम नहीं है क्योंकि रन नहीं है। डी) अधिकांश सीएफ एक्सई फाइलें तब तक बहुत छोटी हैं जब तक कि इसमें बड़े संसाधन शामिल नहीं होते हैं या ...

निष्कर्ष अब तक: डिवाइस पर CF3.5 रनटाइम स्थापित करें: http://msdn.microsoft.com/en-us/library/bb788171%28v=vs.90%29.aspx । दोनों डिवाइसों पर लीगेसी एप को चलाने के लिए, संदर्भित मोटोरोला या अन्य तृतीय पक्ष रनटायम को भी स्थापित किया जाना चाहिए। मैं अपने वातावरण को सख्ती से तैयार करने की सलाह देता हूं ताकि आप डिवाइस के विकास, तैनाती और डीबगिंग के लिए ActiveSync / WMDC का उपयोग कर सकें। यदि आप कुछ और अनुभवी सहयोगी के लिए असमर्थ हैं