Я разрабатываю мобильное приложение в.Net Compact Framework. Мне удалось отредактировать реестр HKEY_CLASSES_ROOT так, чтобы щелчок по файлу с .xyz расширением открыл мое приложение. В основном я должен сделать некоторую операцию на этом файле, когда это нажато.
Однако я понимаю, что, если я делаю это в первый раз, это достигает program.cs в static void Main
. Но когда программа работает, и я нажимаю на файл с .xyz расширением снова, это не загружает программу static void Main
. Я пытался установить точки останова в форме, которая в настоящее время работает, но тем не менее ничто.
Таким образом, где это переходит в? То, как я могу обнаружить файл .xyz, нажато, и что-то?
У вас есть строковые арги в Main?
static void Main(string[] args)
Ваша проблема в том, что вы ищет static void Main
для повторного вызова, который является статическим конструктором . Статические конструкторы вызываются только один раз. Они вызываются до инициализации класса (в данном случае вашей программы) и никогда больше. Они не вызываются для каждого нового экземпляра вашей программы ..
Вы говорите, что вам нужно выполнить некоторая операция над файлом каждый раз, когда по нему щелкают. Я предполагаю, что это связано с графическим интерфейсом, например, вы хотите показать свойства файла при двойном щелчке.
Предполагая, что ваша программа имеет одну главную форму, вы можете установить для ее свойства MinimizeBox
значение false
, а в событии Deactivate
указать this.Close ( );
. Таким образом, когда вы щелкните файл правильного типа, ваше приложение запустится и прочитает аргументы командной строки и отобразит сведения о файле. Если пользователь затем закроет ваше приложение с помощью кнопки ОК в правом верхнем углу, оно закроется по-настоящему, так что в следующий раз, когда он откроется, он откроет новый экземпляр и правильно прочитает аргументы командной строки. Или, если пользователь просто переходит к какой-либо другой программе в WinMo, событие Деактивировать
вашего приложения срабатывает, закрывая приложение. В любом случае приложение всегда либо открыто и находится сверху, либо полностью закрыто, поэтому щелчок файла в проводнике всегда открывает новый экземпляр.
Большая проблема, с которой вы столкнулись, заключается в том, что после запуска приложения Main никогда не вам снова позвонят, а на самом деле этого не должно быть.
В Windows Mobile, к сожалению, сам CF пытается сохранить одиночные экземпляры приложений, поэтому, когда вы пытаетесь запустить приложение во второй раз, сама среда CLR перехватывает это и вместо этого выводит существующий экземпляр на передний план. Одним из прискорбных побочных эффектов этого является то, что у вас нет возможности обрабатывать параметры командной строки.
Чтобы это работало, вам нужно сделать несколько вещей: