Python, создающий файл, приводит к фатальной ошибке только при загрузке?

58
5

У меня есть программа, которая заставляет пакетный файл помещаться в папку автозагрузки. Это работает, когда вы запускаете программу вручную, но когда она уже находится в папке "Автозагрузка" и запускается автоматически при загрузке, я получаю следующую ошибку:

Fatal Error: Python failed to execute the script

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

Вот код для функции:

def moveIO():
move = open('moveIO.bat','w')
move.write('move /Y "' + str(dirName) + '\\FPSBooster.exe" "' + str(targetPath) + '\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"')
move.close()

Вот переменные и оператор "if", который определяет, находится ли программа уже в папке stratup:

dirName = os.path.dirname(os.path.abspath(__file__))
targetPath = os.getenv('APPDATA')
if dirName != targetPath + '\\Microsoft\\Windows\\Start Menu\\Programs\\Startup':
moveIO()

спросил(а) 2017-01-06T13:39:00+03:00 3 года, 9 месяцев назад
1
Решение
58

Ответ, как мы выяснили, был скрыт за отсутствующей информацией.

OP использовал pyinstaller, что вызвало массу неприятностей. Удаление этого и правильное выполнение скрипта через python напрямую устранило проблему.

Я хотел бы предложить попробовать nuitka, которые конвертируют скрипты в C-код, который затем скомпилируется в .exe и, таким образом, позволяет избежать таких проблем, как отсутствие прав доступа для создания временных каталогов и демпинг интерпретатора python.

ответил(а) 2017-01-06T15:21:00+03:00 3 года, 9 месяцев назад
41

Попробуй это

move = open("moveIO.bat", "w+")

w+: открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создается новый файл для чтения и записи.

ответил(а) 2017-01-06T14:10:00+03:00 3 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема