刘弘扬fine 2024-09-24 18:14 采纳率: 50%
浏览 29
已结题

c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办

在visual里面创建了一个windows服务项目,其中打开word的service已经建好了,在visual里面运行正常,打包安装到windows服务后,postman请求成功,word文件的副本也产生了,但是就是桌面没打开word,查了资料说是windows服务不能跟桌面交互,我在windows的服务里面,点击属性,勾选了可以跟桌面交互,重启服务,还是桌面没显示word窗口,救命呀,咋弄啊。
用postman发送请求,http://localhost:8080/open?filePath=C:\Users\31343\Desktop\20240924\1111.docx,这个word的文件夹产生了这个word的副本,就是桌面的word文件打不开。
代码如下,就是一个很简单的打开word的demo,

using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.ServiceProcess;
using System.Text;
using Microsoft.Office.Interop.Word;

namespace second
{
    public partial class WordOpenerService : ServiceBase
    {
        private Application wordApp;
        private HttpListener listener;
        private const string Url = "http://localhost:8080/";

        public WordOpenerService()
        {
            InitializeComponent();
            wordApp = new Application();
            listener = new HttpListener();
            listener.Prefixes.Add(Url);
        }

        protected override void OnStart(string[] args)
        {
            listener.Start();
            listener.BeginGetContext(OnRequest, null);
        }

        protected override void OnStop()
        {
            listener.Stop();
            wordApp.Quit();
            Marshal.ReleaseComObject(wordApp);
        }

        private void OnRequest(IAsyncResult result)
        {
            var context = listener.EndGetContext(result);
            listener.BeginGetContext(OnRequest, null);

            string responseString = "";
            try
            {
                var request = context.Request;
                var path = request.Url.AbsolutePath.Trim('/');

                if (path == "open")
                {
                    string filePath = request.QueryString["filePath"];
                    OpenWord(filePath);
                    responseString = "Word document opened.";
                }
                else if (path == "edit")
                {
                    string filePath = request.QueryString["filePath"];
                    string newText = request.QueryString["newText"];
                    EditWord(filePath, newText);
                    responseString = "Word document edited.";
                }
                else
                {
                    responseString = "Invalid request.";
                }
            }
            catch (Exception ex)
            {
                responseString = $"Error: {ex.Message}";
            }

            byte[] buffer = Encoding.UTF8.GetBytes(responseString);
            context.Response.ContentLength64 = buffer.Length;
            context.Response.OutputStream.Write(buffer, 0, buffer.Length);
            context.Response.OutputStream.Close();
        }

        public void OpenWord(string filePath)
        {
            Document doc = wordApp.Documents.Open(filePath);
            wordApp.Visible = true; // 显示 Word 窗口
        }

        public void EditWord(string filePath, string newText)
        {
            Document doc = wordApp.Documents.Open(filePath);
            doc.Content.Text = newText; // 简单的替换文本
            doc.Save();
            doc.Close();
        }
    }
}


  • 写回答

31条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-09-24 18:14
    关注
    获得0.40元问题酬金

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    你尝试使用VISUAL STUDIO 2019或更高版本来开发一个名为"WORD SERVICE"的WINDOWS服务项目。你需要首先安装VISUAL STUDIO,然后为这个服务项目添加服务。最后,你可以通过POSTMAN发送请求来测试你的服务是否能正常工作。如果你遇到的是WORD无法打开的问题,可能是由于一些设置问题或者服务本身出现问题。为了找出问题所在,可以先检查一下服务项目的配置文件和注册表是否有错误,以及服务是否存在任何已知的安全漏洞。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 修改了问题 9月25日
  • 创建了问题 9月24日

悬赏问题

  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答
  • ¥15 STM32——硬件IIC从机通信代码实现
  • ¥15 关于GRSL投稿的疑问
  • ¥15 微生物组数据分析--微生物代谢物
  • ¥30 求一跃动小子保卫主公Java算法实现
  • ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)
  • ¥20 物理远程控制麦克风使用问题
  • ¥15 打印预览会泄漏纸钱包密码吗