Несколько месяцев назад я создал программу на python для автоматического редактирования и обработки изображений, сделанных специалистами по изображениям в моей компании, чтобы подготовить их для размещения на нашем веб-сайте.Запуск программы через интерпретатор python был задуман как временная мера, пока я не смог переписать код на языке, более подходящем для этого приложения, и получить правильный двоичный файл вместе, но у меня были другие всплывающие проекты, и это закончилось медленнее, чем предполагалось,и поэтому, вместо файла .exe наши специалисты все еще дважды щелкают по файлу .py, чтобы редактировать свои изображения.Это не было проблемой, пока мы не установили две новые станции обработки изображений, обе под управлением Windows 10 (другие станции, на которых программа была построена и протестирована, все работают под управлением Windows 7), и мне сказали установить мою программу на этих новых станциях,Ничто не будет работать вообще, если я не управляю им как администратор.Я мог обойти некоторые проблемы, но не другие, и мог действительно использовать некоторую помощь.Вот разбивка программы, проблема и некоторые соответствующие примеры кода, которые, мы надеемся, дадут кому-то представление о том, что мне следует делать.
Итак, это приложение состоит из двух файлов.Одним из них является демон, установленный в качестве службы Windows, который работает в фоновом режиме, просматривает папку для сканирования и фотографий, затем запускает ряд функций редактирования, когда видит изображение, и сохраняет отредактированные файлы в другую папку.Второй - это простой графический интерфейс, который позволяет технологии обработки изображений запускать и останавливать демон и вносить ручные изменения, когда это необходимо.Основные файлы работают нормально.Они уже почти девять месяцев работают на 8 станциях формирования изображений.Проблема в том, что в этих новых системах Windows 10 программы каким-то образом «заблокированы» от системных ресурсов, которые им необходимы для функционирования.Мне удалось установить демон, если я запустил командную строку от имени администратора (в противном случае я получил бы ошибку «Отказано в доступе»), но он не запустится после установки.Всякий раз, когда я пытаюсь запустить его, он запускается и немедленно останавливается снова.Кроме того, я могу запустить графический интерфейс таким же образом (через командную строку с командной оболочкой, открытой как администратор), но не могу открыть ее, дважды щелкнув мышью или, аналогично, перетащив файл в python.exe.В обоих этих случаях, как и в случае с демоном, он запускается и останавливается снова.
Как упоминалось ранее, демон и графический интерфейс установлены и работают на нескольких компьютерах под управлением Windows 7. Это не графический интерфейс, не открывающийсяпотому что я не начал цикл или что-то в этом роде.Здесь происходит нечто странное, и я не знаю, что это такое, но, похоже, это связано с некоторой разницей в настройках безопасности между Windows 7 и Windows 10, но это всего лишь предположение.Если кто-нибудь знает, в чем может быть настоящая проблема, или какие-то вещи, которые я мог бы попытаться решить, это было бы замечательно.
Поскольку я не уверен, в чем причина проблемы, я публикую минимизированный коддля каждой части этого, которая напрямую взаимодействует с ОС, а также инструкции по установке, скопированные из моей документации.Искренне благодарю вас за любую помощь, которую вы можете оказать.
Демон
class SMWinservice(win32serviceutil.ServiceFramework):
"""This is a windows service that will watch the scan daemon folder and process
jpg images as they are scanned.
"""
_svc_name_ = 'Scan Daemon'
_svc_display_name_ = 'Scan Daemon'
@classmethod
def parse_command_line(cls):
win32serviceutil.HandleCommandLine(cls)
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
self.stop()
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
self.start()
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ''))
self.main()
def start(self):
self.isrunning = True
def stop(self):
self.isrunning = False
def main(self):
image_list=[]
d=0
def rotncrop(file):
im=comiccrop(filename, r'C:\Users\%s\Pictures\My Scans\processed\comic_%d.jpg' %(desktop, d))
image_list.append(im)
os.rename(filename,r'C:\Users\%s\Pictures\My Scans\originals\image_%d.jpg' %(desktop, d))
while self.isrunning:
for filename in glob.glob(r'C:\Users\%s\Pictures\My Scans\scan daemon\*.jpg' %desktop):
file_size = os.stat(filename).st_size
if file_size > 100000:
d=d+1
time.sleep(1)
rotncrop(filename)
time.sleep(0.5)
if __name__ == '__main__':
SMWinservice.parse_command_line()
Графический интерфейс
class maingui:
def __init__(self, master):
self.master=master
master.title("Virtual Straight Edge")
self.v = tkinter.StringVar()
self.lotsofentries=Entry(master,textvariable=self.v)
self.lotsofentries.pack(side='somewhere')
self.lotsofbuttons=Button(text='do things', command=self.somefunction)
self.lotsofbuttons.pack(side='top')
def somefunction(self):
stuff happens
root = Tk()
theta=0
gui = maingui(root)
gui.updatetext()
root.mainloop()
Инструкция по монтажу
1. Download anaconda python for windows.
2. Copy the “Virtual Straight Edge” folder into AppData\Local\Continuum\anaconda3.
3. Open the start menu and right click on “Computer”.
4. Scroll down and select “Properties”.
5. Select “Advanced System Settings”.
6. Select “Environment Variables”.
7. Scroll down to “PATH” and select “Edit”.
8. Add the “Virtual Straight Edge” folder and “anaconda3\python.exe” to your path, separated by semi-colons.
9. If on a scanner, double click on “setup.py”. If on a photostation, double click on “photostation setup.py”. When asked what program to use to run this file, select “Browse” and navigate to the anaconda3 folder. Select “python.exe” and check the box that says “Always use this program to open this type of file.”
10. Allow the setup to run. It should take less than a second. Navigate to the Pictures\My Scans folder and verify that four new folders have been created, named “processed”, “originals”, “VSE Images”, and “scan daemon” (or “photo daemon”).
11. Open the command prompt and change directories to the anaconda3 folder.
12. If on a scanner, install the daemons as windows services by typing “python.exe daemon.py install” and “python.exe cropdaemon.py install”. If on a photostation, type “python.exe photodaemon.py install” and “python.exe cropdaemon (photostation).py install”.
13. Press Ctrl+R and type services.msc in the entry field. This will open the Windows Services Manager. Verify that the “Scan Daemon” (or “Photo Daemon”) and “Crop Daemon” are listed as windows services and close the Windows Services Manager.
14. Create a shortcut to Virtual_Straight_Edge.py and add it to the My Scans folder and the desktop if desired. You are now set up to use Virtual Straight Edge!