У меня есть простой исполняемый файл c # на сетевом диске, который я обновляю ежедневно, но не могу, если люди оставляют его запущенным / открытым на своей машине - PullRequest
0 голосов
/ 16 марта 2011

Какой самый простой способ сделать так, чтобы люди могли запускать его локально вместо ярлыка, указывающего на сетевой диск?

Я полагаю, они всегда запускают его локально и проверяют наличие обновлений при запуске, возможно, создают текстовый документ (на сетевом диске с исполняемым файлом) с последним номером версии, который я обновляю с помощьюкаждой версии, и он читает ее с помощью streamread при запуске приложения, и если номер последней версии был больше, чем исполняемый файл, он выводит диалоговое окно с сообщением и запрашивает обновление до последней версии, и если да, он копирует егосетевой диск ... Я не уверен, как заставить его скопировать последнюю версию и перезаписать себя во время работы приложения, не создавая отдельный исполняемый файл ... Я просто хочу, чтобы он был очень простым, и я чувствую, что должно бытьспособ.

При неудачном нарушении я создал файл-часы, которые контролировали каталог сетевого диска, и когда файл был вставлен с именем файла «прекратить», он закрыл бы экземпляр программы навсе работающие машины, и позвольте мне обновить файл :) ... Однако безопасность сетиВы не сможете запустить эту функцию, и при запуске программа получит сообщение об ошибке, если только программа не была запущена локально, что исключает всю цель, позволяющую пользователям сохранять ярлыки на рабочем столе, указывающие на файл.

РедактироватьНа данный момент я подумал, что было бы интересно иметь таймер и выключать его каждую ночь в 7:00 вечера.В любое время после этого я работаю над этим 90% времени.

private void Form1_Load(object sender, EventArgs e)
        {
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.timer1.Interval = 30000;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);

            this.timer1.Start();

        }
        private void timer1_Tick(object sender, System.EventArgs e)
        {



            DateTime t1 = Convert.ToDateTime(DateTime.Now.ToShortTimeString());

            DateTime t2 = Convert.ToDateTime(("7:00 PM"));
            if (t1.TimeOfDay.Ticks == t2.TimeOfDay.Ticks)

            {
                this.Close();
               // /DateTime.Now.ToShortTimeString();
            }

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Самый простой способ получить это на компьютерах людей - это, возможно, развертывание xcopy и ярлык, созданный с помощью сценария входа?Это было бы задачей сетевого администратора.

Либо ClickOnce разверните его.Это будет размещено на веб-странице и обрабатывает обновления приложений.Его также легко установить.

Он не сможет обновиться сам, как вы говорите, процесс заблокирует файл.Если вы решите сделать это вручную, вам потребуется суррогатный исполняемый файл для обработки обновления.Paint.NET делает это, когда обновляется.

Для пользователя существование этого exe-файла можно хранить молчанием - вы можете хранить его как ресурс основного exe-файла и записывать его в файл только во время обновлений.,После обновления основной exe-файл может быть снова удален основным exe.

2 голосов
/ 16 марта 2011

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

, поэтому, в основном, небольшой пакет

cp <path/to/remote> <path/to/local>
<path/to/local>

Пусть они запустят эту локальную машину вместо запуска exe-файла с сетевого диска.

Вам просто нужно обновить сетевой диск.В следующий раз, когда они запустят приложение, оно получит последнюю версию и затем запустит его локально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...