Python-在Windows上的程序文件/installdir中创建目录的权限不足

Python-在Windows上的程序文件/installdir中创建目录的权限不足,python,windows,file,permissions,Python,Windows,File,Permissions,我刚刚完成了一个程序,即将冻结以供分发 在Windows上,我使用cx_Freeze制作MSI安装程序。默认情况下,这会将程序安装到C:/program Files/(程序名),这在Windows上很常见 当程序启动时,它会在安装目录中创建一个“temp”文件夹。它在整个运行时用于保存正在使用的文件和包以进行提取(它实际上是用于我的MVC平台的web应用程序的安装程序) 这在整个开发过程中一直运行良好,但现在程序安装到程序文件时会立即崩溃,因为它似乎没有创建“temp”文件夹的权限。安装到像Do

我刚刚完成了一个程序,即将冻结以供分发

在Windows上,我使用cx_Freeze制作MSI安装程序。默认情况下,这会将程序安装到C:/program Files/(程序名),这在Windows上很常见

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

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

如何获得Python创建C:/Program文件/(程序名)/temp所需的权限


Ilmiont

我会用这样的东西来代替:

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中找到这种功能


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

我将使用类似以下内容:

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中找到这种功能


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

最好在用户配置文件文件夹中创建这些临时文件。您可以检查echo%TEMP%在命令行提示符中给出的内容。是的,理想情况下,但程序需要是多平台的。相对于install目录,它在win32和Linux上使用相同的代码。我应该在问题中提到这一点。最好在用户配置文件文件夹中创建这些临时文件。您可以检查echo%TEMP%在命令行提示符中给出的内容。是的,理想情况下,但程序需要是多平台的。相对于install目录,它在win32和Linux上使用相同的代码。我应该在问题中提到这一点,谢谢。现在,我想如果它无法创建目录,我只会提示用户以管理员的身份运行。是否可以强制以管理员身份运行,而不使用exe属性中的“以管理员身份运行”选项?例如,像WampSever这样的程序总是以adminNo的身份运行,不要要求用户运行您的程序。花时间学习Windows的工作原理。将文件存储在要存储的位置。如果我使用第三个选项,即以管理员身份运行来修复权限(我真的希望避免这种情况),我可能会试图找到如何启动第二个具有提升权限的小程序,该程序除了更改该目录的权限外,不会做任何其他事情。最好使用
os.environ['APPDATA']
os.environ['LOCALAPPDATA']
。最好调用推荐的shell API。您可以添加一个模块,以跨平台的方式抽象系统和用户目录,例如使用Windows或Linux。强制管理员访问只是为了将数据存储在“程序文件”中是错误的。不要这样做,但如果您必须这样做,那么它可以通过请求执行级别
highestAvailable
requireAdministrator
来工作。只有真正需要管理员访问权限的工具和应用程序才需要管理员访问权限。谢谢。现在,我想如果它无法创建目录,我只会提示用户以管理员的身份运行。是否可以强制以管理员身份运行,而不使用exe属性中的“以管理员身份运行”选项?例如,像WampSever这样的程序总是以adminNo的身份运行,不要要求用户运行您的程序。花时间学习Windows的工作原理。将文件存储在要存储的位置。如果我使用第三个选项,即以管理员身份运行来修复权限(我真的希望避免这种情况),我可能会试图找到如何启动第二个具有提升权限的小程序,该程序除了更改该目录的权限外,不会做任何其他事情。最好使用
os.environ['APPDATA']
os.environ['LOCALAPPDATA']
。最好调用推荐的shell API。您可以添加一个模块,以跨平台的方式抽象系统和用户目录,例如使用Windows或Linux。强制管理员访问只是为了将数据存储在“程序文件”中是错误的。不要这样做,但如果您必须这样做,那么它可以通过请求执行级别
highestAvailable
requireAdministrator
来工作。只有真正需要管理员访问权限的工具和应用程序才需要管理员访问权限。