2016-01-23 140 views
0

我刚刚完成了一个程序,以冻结它进行分发。Python - 在Windows上的Program Files/installdir中创建目录的权限不足

在Windows上,我使用cx_Freeze创建MSI安装程序。默认情况下,这将程序安装到C:/ Program Files /(程序名称),如同在Windows上常见的那样。

当程序启动时,它会在其安装目录中创建一个“temp”文件夹。这在整个运行时间被用来保存用于提取的正在使用的文件和包(它实际上作为我的MVC平台的Web应用程序的安装程序)。

这在整个开发过程中一直运行良好,但现在导致程序在安装到Program Files时立即崩溃,因为它似乎没有创建“temp”文件夹的权限。安装到像Documents这样的目录,或者C:/的根目录,工作正常。

我该如何获得Python创建C:/ Program Files /(程序名称)/ temp所需的权限?

Ilmiont

+0

最好在用户配置文件文件夹中创建这些临时文件。你可以在命令行提示符中查看'echo%TEMP%'给出了什么。 –

+0

是的,理想情况下,但程序需要多平台。相对于安装目录,它可以在win32和Linux上使用相同的代码。我应该在这个问题中提到这一点。 – Ilmiont

回答

1

我会用这样的事情,而不是:

import os 
import sys 

homedir = os.path.expanduser('~') 

if sys.platform == 'win32': 
    datadir = os.sep.join([homedir, 'Application Data', 'MyApp']) 
else: 
    datadir = os.sep.join([homedir, '.myapp']) 

如果C:\ Program Files文件\ MyApp的是首选,然后安装程序可能应该设置权限的目录,以避免问题与权限。我没有从cx_Freeze找到这种功能。

如果程序检测到该目录具有错误的权限,您的程序可能会询问用户该程序应该以管理员身份执行。它可以修复以管理员身份运行时的权限。

+0

谢谢。现在,我认为我只是提示用户以管理员身份运行,如果它无法创建目录。是否有可能强制以管理员身份运行,而不使用exe的属性中的“以管理员身份运行”选项?即像WampSever这样的程序总是以管理员身份运行 – Ilmiont

+1

不,请不要让用户运行提升的程序。花时间学习Windows如何工作。将文件存储在要存储的位置。 –

+0

如果我要使用第三个选项,即以管理员身份运行以修复权限(我真的希望避免这种情况),那么我可能会尝试找出如何使用提升的特权启动第二个小程序,该特权不会执行其他任何操作除了更改该目录的权限。 –