Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Psymaza
6 / 6 / 1
Регистрация: 13.05.2016
Сообщений: 31
Завершенные тесты: 1
1

Перехват адресов открываемых файлов

28.10.2017, 11:27. Просмотров 174. Ответов 3
Метки нет (Все метки)

Добрый день, господа !

Я изучаю c# и решил попрактиковаться. Пишу приложение для просмотра картинок.

В приложении реализовал функцию "открыть с помощью", и тут же столкнулся с проблемой. При попытке открыть открыть несколько файлов, открывается несколько окон приложения. Запрет на запуск копии приложения реализовал, но как реализовать перехват адреса открываемого файла ?

Я думаю сделать цикл в фоновом потоке while (true), который будет перехватывать адреса тех файлов которые пытаются запустить копию данного приложения, но как это сделать ?

М.б. есть другие способы добиться желаемого результата ?

Добавлено через 19 часов 47 минут
Хотя бы подскажите в какую сторону копать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2017, 11:27
Ответы с готовыми решениями:

Логирование открываемых интернет сайтов
Пишу программу, которая ведет учет рабочего времени, сейчас умеет записывать...

Сравнение IP адресов
myADR = IPAddress.Parse(cmb1.Text); public IPAddress DestinationAddress ...

Количество одновременно открываемых файлов
в DOS была команда Files которая указывала количество одновременно открытых...

OpenDialog: ограничение на количество открываемых файлов
Здравствуйте. Делаю приложение на Delphi XE с использованием Firemonkey и...

Есть ли в CommonDialog ограничение на количество открываемых файлов
Здравствуйте. Для открытия файлов использую CommonDialog, с разрешением...

3
Rius
Эксперт .NET
5129 / 3350 / 819
Регистрация: 25.05.2015
Сообщений: 10,287
Записей в блоге: 11
Завершенные тесты: 4
28.10.2017, 11:43 2
Программа защищается от запуска копий.
В программе делается средство приёма сообщений в пределах локального ПК.
Сообщения посылаются другой копией программы перед тем, как она закрывается, обнаружив наличие предыдущей запущенной копии.

Способы передачи сообщений разнообразные.
Например Pipe. Или MemoryMappedFile.
1
Psymaza
6 / 6 / 1
Регистрация: 13.05.2016
Сообщений: 31
Завершенные тесты: 1
28.10.2017, 22:59  [ТС] 3
Спасибо ! Буду копать.

Добавлено через 8 часов 29 минут
Если кому интересно вот мое решение.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public partial class App : Application
    {
        static Mutex mutex;
        const string appName = "TestAnonymusPipe";
        static MainWindow main = new MainWindow ();
 
        public App()
        {
            InitializeComponent ();
        }
 
        [STAThread]
        static void Main()
        {
            App app = new App ();
            string objectName = "SingleInstance";
            string proxyUri = "ipc://CheckNotify/SingleInstance";
 
            bool tryCreateNewApp;
            mutex = new Mutex (true, appName, out tryCreateNewApp);
 
            if (tryCreateNewApp)
            {
                IpcServerChannel ipcChannel = new IpcServerChannel ("CheckNotify");
                RemotingConfiguration.RegisterWellKnownServiceType (typeof (SingleInstance), objectName, WellKnownObjectMode.Singleton);
                
                app.Run (main);
            }
            else
            {
                IpcClientChannel ipcChannel = new IpcClientChannel ();
                ChannelServices.RegisterChannel (ipcChannel, false);
                SingleInstance proxy = (SingleInstance)Activator.GetObject (typeof (SingleInstance), proxyUri);
                proxy.Message(Environment.GetCommandLineArgs()[1]);
            }
        }
 
        public static void OtherApp(string what)
        {
            MessageBox.Show (what);
        }
 
        class SingleInstance : MarshalByRefObject
        {
            public void Message(string what)
            {
                OtherApp (what);
            }
        }
    }
1
Rius
Эксперт .NET
5129 / 3350 / 819
Регистрация: 25.05.2015
Сообщений: 10,287
Записей в блоге: 11
Завершенные тесты: 4
28.10.2017, 23:24 4
Интересно)

Немного почистил, чтобы собиралось для проверки легко.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Ipc;
using System.Threading;
 
namespace ConsoleAppPsymaza
{
    class Program
    {
        static void Main(string[] args)
        {
            string appName = "c71d1e25-8c54-484f-9bcb-db96d6b1d730";
            string objectName = "65569213-b9ad-4405-8ca0-f6d3897e3965";
            string portName = "e718a359-6ec1-4cba-92b9-424821bb3c8f";
 
            string proxyUri = $"ipc://{portName}/{objectName}";
 
            Mutex mutex = new Mutex(true, appName, out bool tryCreateNewApp);
 
            if (tryCreateNewApp)
            {
                IpcServerChannel ipcChannel = new IpcServerChannel(portName);
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(SingleInstance), objectName, WellKnownObjectMode.Singleton);
 
                Console.WriteLine("Press Enter to exit");
                Console.ReadLine();
            }
            else
            {
                IpcClientChannel ipcChannel = new IpcClientChannel();
                ChannelServices.RegisterChannel(ipcChannel, false);
                SingleInstance proxy = (SingleInstance)Activator.GetObject(typeof(SingleInstance), proxyUri);
                proxy.Message(Environment.GetCommandLineArgs());
            }
        }
 
        public static void OtherApp(string[] args)
        {
            Console.WriteLine($"Message received: \"{String.Join(" ", args)}\"");
        }
 
        class SingleInstance : MarshalByRefObject
        {
            public void Message(string[] args)
            {
                OtherApp(args);
            }
        }
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2017, 23:24

Есть ли ограничения по количеству открываемых файлов из консоли?
Собственно в заголовке и есть вопрос. #include<stdio.h> #include<conio.h>...

Настройка URL адресов файлов выложенных на хостинг
Собственно 1) скачал сайт программой Teleport Pro, 2) настроил его под себя...

Извлечение трех случайных адресов файлов из определенной папки
Здравствуйте, специалисты по VBA. Помогите решить непростой вопрос. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru