C# CF: Как открыть определенное расширение файла с моей программой

Я разрабатываю мобильное приложение в.Net Compact Framework. Мне удалось отредактировать реестр HKEY_CLASSES_ROOT так, чтобы щелчок по файлу с .xyz расширением открыл мое приложение. В основном я должен сделать некоторую операцию на этом файле, когда это нажато.

Однако я понимаю, что, если я делаю это в первый раз, это достигает program.cs в static void Main. Но когда программа работает, и я нажимаю на файл с .xyz расширением снова, это не загружает программу static void Main. Я пытался установить точки останова в форме, которая в настоящее время работает, но тем не менее ничто.

Таким образом, где это переходит в? То, как я могу обнаружить файл .xyz, нажато, и что-то?

6
задан Null 10 August 2015 в 15:10
поделиться

4 ответа

У вас есть строковые арги в Main?

static void Main(string[] args)
0
ответ дан 17 December 2019 в 18:13
поделиться

Ваша проблема в том, что вы ищет static void Main для повторного вызова, который является статическим конструктором . Статические конструкторы вызываются только один раз. Они вызываются до инициализации класса (в данном случае вашей программы) и никогда больше. Они не вызываются для каждого нового экземпляра вашей программы ..

0
ответ дан 17 December 2019 в 18:13
поделиться

Вы говорите, что вам нужно выполнить некоторая операция над файлом каждый раз, когда по нему щелкают. Я предполагаю, что это связано с графическим интерфейсом, например, вы хотите показать свойства файла при двойном щелчке.

Предполагая, что ваша программа имеет одну главную форму, вы можете установить для ее свойства MinimizeBox значение false , а в событии Deactivate указать this.Close ( ); . Таким образом, когда вы щелкните файл правильного типа, ваше приложение запустится и прочитает аргументы командной строки и отобразит сведения о файле. Если пользователь затем закроет ваше приложение с помощью кнопки ОК в правом верхнем углу, оно закроется по-настоящему, так что в следующий раз, когда он откроется, он откроет новый экземпляр и правильно прочитает аргументы командной строки. Или, если пользователь просто переходит к какой-либо другой программе в WinMo, событие Деактивировать вашего приложения срабатывает, закрывая приложение. В любом случае приложение всегда либо открыто и находится сверху, либо полностью закрыто, поэтому щелчок файла в проводнике всегда открывает новый экземпляр.

1
ответ дан 17 December 2019 в 18:13
поделиться

Большая проблема, с которой вы столкнулись, заключается в том, что после запуска приложения Main никогда не вам снова позвонят, а на самом деле этого не должно быть.

В Windows Mobile, к сожалению, сам CF пытается сохранить одиночные экземпляры приложений, поэтому, когда вы пытаетесь запустить приложение во второй раз, сама среда CLR перехватывает это и вместо этого выводит существующий экземпляр на передний план. Одним из прискорбных побочных эффектов этого является то, что у вас нет возможности обрабатывать параметры командной строки.

Чтобы это работало, вам нужно сделать несколько вещей:

  1. Подорвать попытку CF сделать ваше приложение единичным , чтобы вы могли запускать несколько экземпляров.
  2. Удерживайте мьютекс в приложении, чтобы узнать, запущены ли вы.
  3. С самого начала порождает поток для прослушивания входящих параметров от последующих экземпляров. Когда приходят параметры, выйдите на передний план и обработайте параметры соответствующим образом.
  4. При запуске, если мьютекс уже занят (т. Е. Приложение уже запущено), используйте IPC (двухточечная очередь - хороший способ) для отправки существующего потока слушателя приложения (см. № 3) ваших параметров. а потом просто уйди.
2
ответ дан 17 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: