0

我在 .net 中构建了一个 Windows 应用程序,并通过设置和部署项目将该应用程序安装在客户端计算机上。该软件安装在同一域中的大约 15 台机器上。我们会根据客户的建议不断添加新功能。问题是每次更新软件时我都必须在所有机器上重新安装软件。

我正在寻找上述问题的解决方案,例如如果我将更新版本放在普通机器上并在所有机器上从普通位置更新设置。我在应用程序配置文件中存储了版本号,每次更新版本时我都会将版本号增加 1。我正在考虑在数据库中创建具有最新版本号的新表。当数据库中的版本发生变化时,将执行一个 .exe,它将从普通机器更新所有机器上的软件。

我怎样才能做到这一点?如果有人有更好的方法,请告诉我。

仅供参考:我已经检查过一次点击,但它不符合我的要求,因为它只为一个用户更新软件,我必须为所有用户更新软件。

谢谢

4

1 回答 1

0

创建一个带有按钮的简单表单,在单击事件上,您可以尝试以下代码。您可以使用此技术来更新与您要更新的软件相关的任何文件。

    [DllImport("advapi32.DLL", SetLastError = true)]

    public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);



    private void button1_Click(object sender, EventArgs e)

    {

        IntPtr admin_token = default(IntPtr);

        WindowsIdentity wid_current = WindowsIdentity.GetCurrent();

        WindowsIdentity wid_admin = null;

        WindowsImpersonationContext wic = null;

        try

        {

            if (LogonUser("username", "domain", "password", 9, 0, ref admin_token) != 0)

            {

                wid_admin = new WindowsIdentity(admin_token);

                wic = wid_admin.Impersonate();

                System.IO.File.Copy("D:\\test.txt", "\\\\\\192.168.25.40\\c$\\D:\\test.txt", true);



                MessageBox.Show("Copy succeeded");

            }

            else

            {

                MessageBox.Show("Copy Failed");

            }

        }

        catch (System.Exception se)

        {

            int ret = Marshal.GetLastWin32Error();

            MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());

            MessageBox.Show(se.Message);

        }

        finally

        {

            if (wic != null)

            {

                wic.Undo();

            }

        }

    }
于 2013-06-25T06:15:36.197 回答