現在、コンピューターの起動時に Python で記述した (そして exe にコンパイルした) スクリプトを実行しようとしています。このスクリプトは、ファイルをダウンロードして、コンピューターの指定した場所にコピーするだけです。ここに私が使用しているコードの一部があります:
def DownCopy(url,dst):
import shutil
""" Download and copy file """
fn = os.path.basename(urllib.url2pathname(url))
filename, unused = urllib.urlretrieve(url,fn)
#if remote file change set exec permission
if filename != url and not url.startswith('file:///'):
os.chmod(filename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
#check if target directory exist, if not create it
dstDir = os.path.dirname(dst)
if not os.path.exists(dstDir):
os.mkdir(dstDir)
#copy
shutil.copy(filename, dst)
シェルを使用してこのスクリプトを実行するcmd
と、機能します。ファイルがダウンロードされ、フォルダーが作成され、ファイルがそのフォルダーにコピーされます。ただし、スケジュールされたタスク (権限: システム) からこのスクリプトを呼び出すと、何も起こらず、Last Result
フィールドは に設定され0xfffff
ます。
基本的に、このスクリプトを cmd シェルから呼び出す場合とスケジュールされたタスクから呼び出す場合の違いは何ですか? ここで気付く唯一の違いは、スクリプトを起動するユーザーです。cmd シェルを使用すると、スクリプトは現在のユーザーによって実行されますが、スケジュールされたタスクによって呼び出されたときにシステムによって実行されます。しかし、システムによって呼び出されたときにスクリプトが機能しない理由はわかりません...
Caspar のアドバイスに従い、次の結果が得られました。
スケジュールされたタスクの結果を出力すると、
[Errno 13] : Acces Denied
エラーが発生します。ファイルのコピー先のフォルダーのアクセス許可を確認したところ、システムは「すべての権限」に設定されています。これが私のトレースです:Traceback (most recent call last): File "<string>", line 58, in <module> File "<string>", line 51, in Main File "<string>", line 30, in DownCopy File "Z:\home\user\workspace\repo_config_os\temp-DwIWiG\build\pyi.win32\pyinstaller_build_all\out08-PYZ.pyz\urllib", line 93, in urlretrieve File "Z:\home\user\workspace\repo_config_os\temp-DwIWiG\build\pyi.win32\pyinstaller_build_all\out08-PYZ.pyz\urllib", line 243, in retrieve IOError: [Errno 13] Permission denied: u'IzznoLo.exe'
したがって、問題はダウンロード部分にあるようです。ネットワークは SYSTEM に対して制限されていますか? 「彼」を許可する方法はありますか?