使用ironpython共享文件夹

服务劳里森

我写了一个(铁的)python脚本,它共享一个远程服务器上的文件夹。

import getopt
import ctypes as C
from ctypes.wintypes import (LPCWSTR)

class SHARE_INFO_2(C.Structure):
    _fields_ = [('shi2_netname', LPCWSTR),                
                ('shi2_type', C.c_int),
                ('shi2_remark', LPCWSTR),
                ('shi2_permissions', C.c_int),
                ('shi2_max_uses', C.c_int),
                ('shi2_current_uses', C.c_int),
                ('shi2_path', LPCWSTR),
                ('shi2_passwd', LPCWSTR)]    

def Share(server, shareName, dir):
    i = C.c_int()
    info = SHARE_INFO_2()

    STYPE_DISKTREE = 0

    info.shi2_netname = shareName
    info.shi2_path = dir
    info.shi2_type = STYPE_DISKTREE
    info.shi2_remark = "Shared from script"
    info.shi2_max_uses = -1
    info.shi2_passwd = ""

    return C.windll.Netapi32.NetShareAdd(server, 2, info, C.byref(i)) == 0

server = "rs01"
dir = "c:\\temp"

Share(server, "Temp", dir)

它是在Visual Studio 2015中创建的。在Visual Studio中运行此脚本时,它可以正常运行。该文件夹是共享的。但是从命令行运行脚本:

ipy C:\ PythonConsole \ SysTasks.py

给出异常:Iron python代码中某处的System.AccessViolationException。我觉得这与结构的结构声明/内存布局有关,但不确定。

有人知道这是怎么回事吗?

服务劳里森

找到了解决方案!

必须使用缓冲区功能将SHARE_INFO_2结构转换为字节数组,并且必须将该数组传递给NetShareAdd。

def Share(server, shareName, dir):    
    info = SHARE_INFO_2()

    STYPE_DISKTREE = 0

    info.shi2_netname = shareName
    info.shi2_path = dir
    info.shi2_type = STYPE_DISKTREE
    info.shi2_remark = "Shared from script"
    info.shi2_max_uses = -1
    info.shi2_passwd = ""
    info.shi2_current_uses = 0
    info.shi2_permissions = 0xFFFFFFFF

    i = c_int()

    bytearray = buffer(info)[:] # SERIALIZE INTO BYTES

    return windll.Netapi32.NetShareAdd(server, 2, bytearray, C.byref(i)) == 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ironpython共享文件夹

来自分类Dev

如何使用NFS共享文件夹?

来自分类Dev

如何使用NFS共享文件夹?

来自分类Dev

共享文件夹API

来自分类Dev

Samba共享文件夹

来自分类Dev

共享文件夹的学生

来自分类Dev

从UBUNTU共享文件夹

来自分类Dev

如何使用JavaScript访问共享/网络文件夹?

来自分类Dev

使用WatchService监视远程共享文件夹(Windows / SMB)

来自分类Dev

使用Powershell访问我的共享文件夹的脚本

来自分类Dev

使用VirtualBox自动挂载共享文件夹

来自分类Dev

如何在Linux上使用凭据共享文件夹?

来自分类Dev

如何在云端使用密码共享文件夹

来自分类Dev

使用ABE以编程方式创建共享文件夹

来自分类Dev

使用 Map Network Drive 访问共享文件夹

来自分类Dev

使用 onedrive for Business 的组织范围共享文件夹

来自分类Dev

LAN共享文件夹和附带的文件夹

来自分类Dev

LAN共享文件夹和附带的文件夹

来自分类Dev

如何安装共享文件夹的子文件夹?

来自分类Dev

访问获取共享文件夹的子文件夹

来自分类Dev

共享文件夹(写文件夹内的只读文件夹)

来自分类Dev

使用SAMBA在OpenSUSE 13.1上共享文件夹(共享不起作用)?

来自分类Dev

Android VirtualBox共享文件夹

来自分类Dev

Vagrant / PuPHPet交换共享文件夹

来自分类Dev

共享子文件夹ownCloud

来自分类Dev

访问共享的网络文件夹

来自分类Dev

通过Dropbox API共享文件夹

来自分类Dev

从共享文件夹安装IntelliJ插件

来自分类Dev

跨嵌套文件夹共享变量