我在Server2003中 开发的 Windows Service 调用office组件打开excel的时候不报错,也打不开;
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在Server2003中 开发的 Windows Service 调用office组件打开excel的时候不报错,也打不开;相关的知识,希望对你有一定的参考价值。
当我打开任务管理器的时候,看到在后台启动了很的EXCEL.EXE进程,这个应该是我的Windows Service 启动的;这是怎么回事?请问怎么用Windows Service 怎么打开excel呢?或者在Service 用OLEDB打开也行,但是打开0ffice2007创建的文档为什么老出现“外部表不是预期的格式”错误?我已经使用的Microsoft.ACE.OLEDB.12.0驱动
问题描述不清楚,我很难准确回答你。
你是调用 Excel Application 打开 *.xls 文件或创建 Excel 表格吗?
还是将 Excel 电子表格当数据库用?
问题一:
默认情况下 Win32 服务进程并非运行在用户桌面(Windows 至少不止一个桌面,我们看到的界面通常是用户默认桌面),所以我们看不到 Win32 服务进程的界面,解决方法:
1)(不推荐)在 Windows 服务管理器里面,勾选“允许服务与桌面交互”(开始 -> 运行 -> 输入 services.msc 即可打开服务管理)。
2)通过编程解决(切换当前进程的工作站和桌面),需要用到 Win32 API 接口,步骤:
1.用 OpenWindowStation 函数打开 winsta0 工作站
2.用 SetProcessWindowStation 函数将进程(服务进程)切换到 OpenWindowStation 函数打开的工作站
2.用 OpenDesktop 函数打开 default 桌面(用户当前桌面)
4.用 SetThreadDesktop 设置线程(你服务的主线程)的桌面为 OpenDesktop 所打开的桌面
完成上述 4 步,即可在服务进程中显示窗口了。以上函数均为 Win32 API 在 C# 中使用,需要先申明的,具体请自己在百度搜索。
这是是 VC++ 的参考例子:http://www.vckbase.com/document/viewdoc/?id=283
如果仍然不懂,可以发消息请教我。
问题二:
用 ADO.NET 或 ADO 都可以连接 Excel 电子表格,连接字符串请上网搜一下。
追问我就是想用Windows Service在后台打开一下office,不需要界面的,只是做一个判断,判断他是不是office文件,如果是office文件有没有加密码;如果这个excel加有密码就程序就打不开,因此会抛出一个异常;我是用C#开发,引用的Microsoft.Office.Interop.Excel ,打不开excel,也不报错;后来我就想用OLEDE以连接数据库的方式打开他,但是当打开office2007创建的文档时,老提示“外部表不是预期的格式”
追答你有没有使用更新的 .NET 版本的 ADO.NET 试一下?
另外判断是否 Excel 文件,我觉得可以直接用 System.IO.FileStream 文件流直接读取二进制数据进行判断,不过需要了解 Excel 的文件格式(二进制格式),8过这方面资料还是是很多的。
下面是文件流直接读 Excel 的示例(还是 VC++ 例子,呵呵):
http://www.vckbase.com/document/viewdoc/?id=815
Microsoft Excel File Format(Excel 文件格式):
http://download.csdn.net/detail/hq628/854437 (下载需要有 CSDN 账号,并且需要积分)
您好,关于在Windows服务中打开EXCEL的问题已经用OLEDB方法解决了,但是如果要打开word,或者PPT有什么办法吗?谢谢
追答参见我第一次回答。
为什么窗口不可见?
答:默认情况下,服务运行在一个特殊桌面环境,运行在该桌面中,任何显示元素均不可见。
你用 Win32 服务打开 Word 实际上就是,服务创建了 Word 子进程,该 Word 进程的从 Win32 服务进程中继承了相同的“特殊桌面”环境,因此 Word 也不可见。
方法一:
为 Win32 服务指定合适的工作站和桌面(即:Winsta0 工作站的 default 桌面),然后在创建 Word 进程。
方法二:
Win32 服务调用 Win32 API 的 CreateProcess 函数创建 Word 进程,在调用 CreateProcess 函数之前要打开 Winsta0 工作站和 default 桌面,然后在调用 CreateProcess 传递桌面句柄。
参考(VC++)的:http://blog.csdn.net/phoebeyufish/article/details/1560785
至于:.NET 框架类库的 System.Diagnostics.Process 类是否可以实现上述效果,本人不知道,好像不能。
如果你不会将 VC++ 代码改成 C# 代码,请先结此贴后另开一贴,我帮你改一下。
我用2008 64位出现过类似问题,将iis的应用程序池中的高级设置中,允许32位程序运行即可
无法在 Windows Server 2012 R2 上安装 phpmyadmin
【中文标题】无法在 Windows Server 2012 R2 上安装 phpmyadmin【英文标题】:Unable to install phpmyadmin on Windows Server 2012 R2 【发布时间】:2016-08-01 04:03:21 【问题描述】:我正在开发一个使用 PHP 和谷歌图表的数据可视化门户网站。
我在 windows server 2012 r2 上安装了 Apache
、Php
和 Mysql
,但无法安装 phpmyadmin。
我已将 PHPMyAdmin 文件夹放入我的根目录并在我的浏览器中提供此网址:localhost/PHPMyAdmin
我收到以下错误:
Fatal error: Uncaught Error: Call to undefined function __() in C:\Apache\htdocs\phpMyAdmin\libraries\sanitizing.lib.php:135
Stack trace:
#0 C:\Apache\htdocs\phpMyAdmin\libraries\Message.php(586): PMA_sanitize('session_start()...', false, true)
#1 C:\Apache\htdocs\phpMyAdmin\libraries\Message.php(650): PMA\libraries\Message::decodeBB('session_start()...')
#2 C:\Apache\htdocs\phpMyAdmin\libraries\Error.php(167): PMA\libraries\Message->getMessage()
#3 C:\Apache\htdocs\phpMyAdmin\libraries\ErrorHandler.php(157): PMA\libraries\Error->getHash()
#4 C:\Apache\htdocs\phpMyAdmin\libraries\ErrorHandler.php(121): PMA\libraries\ErrorHandler->addError('session_start()...', 2, 'C:\\Apache\\htdoc...', 83, true)
#5 [internal function]: PMA\libraries\ErrorHandler->handleError(2, 'session_start()...', 'C:\\Apache\\htdoc...', 83, Array)
#6 C:\Apache\htdocs\phpMyAdmin\libraries\session.inc.php(83): session_start()
#7 C:\Apache\htdocs\phpMyAdmin\libraries\common.inc.php(266): require('C:\\Apache\\htdoc...')
#8 C:\Apache\htdocs\phpMyAdmin\inde in C:\Apache\htdocs\phpMyAdmin\libraries\sanitizing.lib.php on line 135
【问题讨论】:
请编辑您的问题,目前只是一堵巨大的文字墙,让我想立即离开...... ***.com/questions/36237930/… 您有什么想问的吗? 【参考方案1】:检查您的会话目录是否可被 Web 服务器进程写入。
最好的方法是创建自己的 Phpinfo 文件;在任何网络可访问的文件夹中创建一个包含以下内容的文件(您可以将其命名为 test.php 或 phpinfo.php 或任何您喜欢的名称):
<?php
phpinfo();
?>
在浏览器中打开该文件(http://localhost/test.php 或类似文件)并查找行 session.save_path。那是您的会话文件夹;确保权限合适,看看是否有帮助。
就像在 Windows 上右键单击提到的文件夹并查看可以更改权限的属性。
【讨论】:
以上是关于我在Server2003中 开发的 Windows Service 调用office组件打开excel的时候不报错,也打不开;的主要内容,如果未能解决你的问题,请参考以下文章
在windows server 2003虚拟机中怎么安装IIS
什么是Windows Server 2003 R2是什么版本?
我在主机上安装了一个虚拟主机Windows server 2003,主机网络连接正常,但虚拟主机上连接不上?
Windows Server 2003 standart edition SP2 上安装SQL Server 2008 开发版 英文版 教程