Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何访问/系统帐户下Windows服务的WiX CommonAppDataFolder参数是多少_Excel_Visual Studio 2013_Wix - Fatal编程技术网

Excel 如何访问/系统帐户下Windows服务的WiX CommonAppDataFolder参数是多少

Excel 如何访问/系统帐户下Windows服务的WiX CommonAppDataFolder参数是多少,excel,visual-studio-2013,wix,Excel,Visual Studio 2013,Wix,我有一个Windows服务,需要在系统帐户下运行。我使用CommonAppDataFolder作为特定于应用程序的配置内容和源材料(如日志文件、Excel模板文件等)的目标。。。该服务正确安装并运行,但是当它尝试加载Excel模板文件时遇到问题,以下内容显示该服务能够访问和写入日志文件。应用程序使用NLog作为日志框架: 应用程序名称:AppName文件版本:5.2.0.0发布:用户:NT权限\系统 |12:24:59 | NT AUTHORITY\SYSTEM | Info | AppName

我有一个Windows服务,需要在系统帐户下运行。我使用CommonAppDataFolder作为特定于应用程序的配置内容和源材料(如日志文件、Excel模板文件等)的目标。。。该服务正确安装并运行,但是当它尝试加载Excel模板文件时遇到问题,以下内容显示该服务能够访问和写入日志文件。应用程序使用NLog作为日志框架:

应用程序名称:AppName文件版本:5.2.0.0发布:用户:NT权限\系统 |12:24:59 | NT AUTHORITY\SYSTEM | Info | AppName-已启动AppName服务 2 | 12:24:59 | NT AUTHORITY\SYSTEM | Trace | AppName-从配置文件中获取RTU报警名称 3 | 12:24:59 | NT AUTHORITY\SYSTEM | Trace | AppName-从配置文件中获取条件报警名称 4 | 12:25:23 | NT AUTHORITY\SYSTEM | Debug | AppName-获取的计划查询

日志文件位于:

D:\programdata\Companyname\AppName\Logs

但是,当服务尝试访问Excel模板文件时,会生成:

System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft Excel无法访问文件“d:\programdata\CompanyName\AppName\Templates\PsaDefault.xltm”。有几个可能的原因:

•文件名或路径不存在

•另一个程序正在使用该文件

•您试图保存的工作簿与当前打开的工作簿同名

这些都不是原因。我当时的想法是,好吧。。。commonappdata for SYSTEM account位于不同的位置,这是bourne在这个主题上快速搜索出来的。但是,如果是这种情况,服务如何能够写入和访问日志文件,而日志文件位于完全相同的文件夹结构下

是否有一种方法可以修改我的WiX项目,以提供必要的说明来覆盖可能的“登录用户”/系统 帐户冲突,或者将文件夹结构更改为系统帐户不会遇到此问题的位置。系统帐户是否有等效的WiX参数?还是我对这个问题的假设完全错了

以下是my product.wxs文件的摘录(GUID、公司和应用程序特定信息被占位符覆盖):


建议:简而言之,将模板移动到以下位置:
%ALLUSERSPROFILE%


文件/文件夹ACL:用户的实际ACL设置 配置文件文件夹本身可能是原因。你能试着跑吗 从
%ALLUSERSPROFILE%
下的某个地方?默认情况下应该是可写的吗

在现代Windows系统上,通常映射到:
C:\ProgramData
(在其他地方的旧系统上)。我认为
系统
帐户应该在这里拥有完全访问权限?试一试


测试路径:要测试该路径:Windows键+点击R。粘贴
%ALLUSERSPROFILE%
,然后按OK

另外:打开一个
cmd.exe
并转到“
设置
”(不带引号)以查看环境变量及其值。可能会有帮助。只是为了方便而添加(这是众所周知的)


DCOM权限:COM服务器具有启动的相关权限。帮助您调试的一些工具和注释:

  • 默认值:在:
    comexp.msc
    中设置了一些默认的DCOM权限

    • 启动:Windows键+点击右键。粘贴
      comexp.msc
      ,然后按OK
    • 右键单击我的电脑=>
      属性
      =>
      COM安全
    • 我没怎么看过这些设置。很多灵活性,很少有意义的事情
  • 特定的:也可以在注册表中为每个COM类设置特定的权限。是否可以使用
    oleview.exe
    (或直接使用
    regedit.exe
    )进行检查

    • 在Windows SDK文件夹中查找oleview.exe。在以下目录下搜索磁盘:
      %ProgramFiles(X86)%\Windows Kits\[SDK-VERSION-NUMBER-HERE]\bin
    • 找到您的类(下面的示例:
      脚本编写.字典
      )。请参阅
      的“启动权限”和
      的“访问权限”选项卡

我不记得在这里看到过很多Office应用程序的自定义设置,我可能错了。我现在没有办公室可供测试

建议:简而言之,将模板移动到以下位置:
%ALLUSERSPROFILE%


文件/文件夹ACL:用户的实际ACL设置 配置文件文件夹本身可能是原因。你能试着跑吗 从
%ALLUSERSPROFILE%
下的某个地方?默认情况下应该是可写的吗

在现代Windows系统上,通常映射到:
C:\ProgramData
(在其他地方的旧系统上)。我认为
系统
帐户应该在这里拥有完全访问权限?试一试


测试路径:要测试该路径:Windows键+点击R。粘贴
%ALLUSERSPROFILE%
,然后按OK

另外:打开一个
cmd.exe
<!-- The following section deals with the deployment of the application data files including logs, templates and userguide elements--> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="CommonAppDataFolder" Name="CommonAppData" > <Directory Id="dirCompanyAppData" Name="CompanyName"> <Directory Id="dirAppNameAppData" Name="AppName"> <Component Id="cmpDirAppNameAppData" Guid="{###}" KeyPath="yes"> <CreateFolder Directory="dirAppNameAppData" /> <RemoveFile Id="PurgeAppnameAppData" Name="*.*" On="uninstall" /> <RemoveFolder Id="idDirAppNameAppData" On="uninstall" Directory="dirAppNameAppData" /> </Component> <Directory Id="dirAppNameAppDataOutput" Name="Output"> <Component Id="cmpDirAppNameAppDataOutput" Guid="{###}"> <CreateFolder Directory="dirAppNameAppDataOutput" /> <RemoveFile Id="PurgeAppNameAppDataOutput" Name="*.*" On="uninstall" /> <RemoveFolder Id="idDirAppNameAppDataOutputRemove" On="uninstall" Directory="dirAppNameAppDataOutput" /> </Component> </Directory>