Category Archive: Windows

4月 30th, 2018

sfc修复:

Win+X—命令提示符(管理员)—sfc /scannow—Enter可以查看是否存在系统文件损坏等问题

 

以管理员权限运行命令提示符,执行“dism /online /cleanup-image /restorehealth”命令,Windows将自动联网修复损坏的文件。

4月 26th, 2018

惯用命令—shutdown:

shutdown可达成如下工作:

* 可以选择自由关机模式:是要关机、重启或进入单用户操作模式均可;

* 可以设置关机时间:可以设置成现在立刻关机,也可以设置某一个特定的时间才关机;

* 可以自定义关机消息:在关机之前,可以将自己设置的消息传达给在线用户;

* 可以仅发出警告消息:有时有可能你要进行一些测试,而不想让其他用户干扰,或者是明白地告诉用户某段时间要注意下,这个时候可以使用shutdown来通知用户,但却不是真的要关机;

* 可以选择是否要用fsck检查文件系统.

 

常用的语法规则:

/sbin/shutdown [-t 秒] [-rkhncfF] 时间 [警告消息]

参数:

-t sec  : -t 后面加秒数,即”过几秒后关机”的意思;

-r     : 在将系统服务停掉之后就重启(常用);

-h     : 将系统服务停掉后,立即关机(常用);

-k     : 不是真的关机,只是发送警告消息出去;

-n     : 不经过init程序,直接以shutdown的功能来关机;

-c     : 取消已经在进行的shutdown命令内容;

-f     : 关机并开机之后,强制略过fsck的磁盘检查;

-F     : 系统重启之后,强制进行fsck的磁盘检查;

时间  : 这是一定要加入的参数.可以为now 10 13:00 ….

eg:

shutdown -h 10 ‘I will shutdown after 10 minutes’.

告诉大家:这台机器会在10分钟后关机,并且会显示在目前登录者的屏幕前方.

 

常用关机、重启命令:

重启命令:

reboot

hutdown -r now

init 6

关机命令:

shutdown -h now

halt -p

poweroff

init 0

 

小注:

shutdown 可以依据目前已启动的服务来逐次关闭服务后关机;而halt 却能够不理会目前系统状况下,进行硬件关机的特殊功能.

 

 

 

 

Dos

shutdown  /?

没有参数   显示帮助。这与键入 /? 是一样的。

/?         显示帮助。这与不键入任何选项是一样的。

/l         注销。这不能与 /m 或 /d 选项一起使用。

/s         关闭计算机。

/r         完全关闭并重启计算机。

/h         休眠本地计算机。

可以与 /f 选项一起使用。

/t xxx     将关闭前的超时时间设置为 xxx 秒。

有效范围是 0-315360000 (10 年),默认值为 30。

如果超时时间大于 0,则默示为

/f 参数。

/c “comment” 有关重新启动或关闭的原因的注释。

最多允许 512 个字符。

/f         强制关闭正在运行的应用程序而不事先警告用户。

如果为 /t 参数指定大于 0 的值,

则默示为 /f 参数。

/d [p|u:]xx:yy  提供重新启动或关闭的原因。

p 指示重启或关闭是计划内的。

u 指示原因是用户定义的。

如果未指定 p 也未指定 u,则重新启动或关闭

是计划外的。

xx 是主要原因编号(小于 256 的正整数)。

yy 是次要原因编号(小于 65536 的正整数)。

 

TAGS:
3月 27th, 2018

图片1

可以看到对应站点的功能视图中有IP地址和域限制,然后点击进入:如下图所示

点击添加拒绝限制规则就可以限制特定IP或者特定IP段(如果允许某IP或某IP段允许访问,点击添加允许限制规

则)即图片2

图片3

3月 27th, 2018

防火墙开启可以有效防止外部非法访问,能够很好的保护内网电脑。可是开启防火墙之后,很多应用服务内外网访问都有限制,那么可以通过设置防火墙端口排除例外来解决这个问题,本经验以win2008R2系统为例

方法/步骤

1、Windows2008R2系统防火墙在,控制面板里面去找(还可以到服务器管理器里面找)

2、点击进入08防火墙设置选项卡,注意一下【高级设置】里面去设置

3、在防火墙设置右上方,有【创建规则】

4、入站规则

进入规则向导页面,选择【端口】类型

5、本案例以开放webmail自定义端口为例,选择特定端口如8008

6、操作设置

然后在操作设置里面,选择【允许连接】

7、安全域选择

接下来就是重点了,需要允许应用到的规则域区域。建议全部选择,

8、然后是规则的名称,可以任意取名。建议加上备注,比如XX服务器XX应用

9、检查配置(出站和入站的区别就是端口的指向)

设置好之后,点击入站规则里面查看。可以看到刚刚的配置设置

10、出站规则

出站规则设置方法是一样的,注意一下。协议类型,有TCP. UDP 你可以选择所有及 ALL类型

11、测试端口

设置好服务器防火墙端口开放之后,再内网的还需要在路由器上设置映射。可以通过站长工具在线测试,

注意事项

以上介绍的是08系统防火墙常规添加规则的方法,当然您也可以直接在网卡TCP/IP里面设置筛选也是一样的效果。

3月 4th, 2018

一、在Windows中安装redis数据库

1、在Windows上安装Redis,安装的时候把加入到环境变量勾选上。
2、安装好后,win+r打开运行输入cmd进入控制台程序,直接输入redis-cli并且输入ping,回复pong则链接成功,

1、简单字符串存取
set key value
get key
···

3、安装RedisStudio,redis管理界面,个人觉得最好使用的。

二、在Ubuntu中安装redis数据库

1、在Vmware中安装Ubuntu虚拟机;
2、安装redis

//下载redis-3.2.6
sudo wget http://download.redis.io/releases/redis-3.2.6.tar.gz
//解压redis-3.2.6
sudo tar -zxvf redis-3.2.6.tar.gz

3、在~/下新建一个redis文件夹并且将redis-3.2.6下的文件全部拷贝进该redis文件夹下

//如果没有安装gcc
sudo apt-get install gcc
//进入redis文件夹执行make
sudo make
sudo make install

4、此时就将redis安装到了/usr/local/bin(服务端,客户端都在里面启动)下了

//进入/usr/local/bin文件夹中
cd /usr/local/bin
//启动redis-server
redis-server ~/redis/redis.conf
redis-cli

5、为了能在我们的win中访问linux下的redis,我们还需要对redis.conf进行少量的更改

protected-mode yes  --> protected-mode no
bind 127.0.0.1      --> #bind 127.0.0.1

6、在终端输入ifconfig,查看ubuntu的IP地址inet addr:xxx.xxx.xxx.xxx

三、C#使用redis

1、Nuget安装StackExchange.Redis,程序中加入SeRedisHelper类

/**************************************************************** 
 * 作    者:xuxuzhaozhao
 * CLR 版本:4.0.30319.42000 
 * 创建时间:2017/5/8 9:12:47 
 * 当前版本:1.0.0.1 
 *  
 * 描述说明: StackExchange.Redis 的帮助类
 * 
 * 修改历史: 
 * 
*****************************************************************/

using System;
using StackExchange.Redis;
using System.Configuration;
using System.Collections.Generic;

namespace Common.Redis
{
    public class SERedisHelper
    {
        private static string _conn = ConfigurationManager.AppSettings["RedisConnectString"]

        /// <summary>
        /// 存下实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="t">实体</param>
        /// <param name="ts">过期时间</param>
        /// <returns></returns>
        public static bool Set<T>(string key, T t, TimeSpan ts)
        {
            using (var client = ConnectionMultiplexer.Connect(_conn))
            {
                var jsonstr = Newtonsoft.Json.JsonConvert.SerializeObject(t);
                return client.GetDatabase().StringSet(key, jsonstr, ts);
            }
        }

        /// <summary>
        /// 根据键来获取实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T GetEntityBykey<T>(string key) where T : class
        {
            using (var client = ConnectionMultiplexer.Connect(_conn))
            {
                var jsonstr = client.GetDatabase().StringGet(key);
                return string.IsNullOrEmpty(jsonstr) ? null : Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonstr);
            }
        }

        /// <summary>
        /// 存单个键值对
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="ts">过期时间</param>
        /// <returns></returns>
        public static bool StringSetSingle(string key, string value, TimeSpan ts)
        {
            using (var client = ConnectionMultiplexer.Connect(_conn))
            {
                return client.GetDatabase().StringSet(key, value, ts);
            }
        }

        /// <summary>
        /// 取单个值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string StringGetSingle(string key)
        {
            try
            {
                using (var client = ConnectionMultiplexer.Connect(_conn))
                {
                    return client.GetDatabase().StringGet(key);
                }
            }
            catch (Exception)
            {

                return null;
            }
        }

        /// <summary>
        /// 批量存值
        /// </summary>
        /// <param name="keys">键数组</param>
        /// <param name="values">值数组</param>
        /// <returns></returns>
        public static bool StringSetMany(string[] keys, string[] values)
        {
            var count = keys.Length;
            var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count];
            for (int i = 0; i < count; i++)
            {
                keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keys[i], keys[i]);
            }
            using (var client = ConnectionMultiplexer.Connect(_conn))
            {
                return client.GetDatabase().StringSet(keyValuePair);
            }
        }

        /// <summary>
        /// 批量获取值
        /// </summary>
        /// <param name="keysStrings">键数组</param>
        /// <returns></returns>
        public static string[] StringGetMany(string[] keysStrings)
        {
            var count = keysStrings.Length;
            var keys = new RedisKey[count];
            var values = new string[count];
            for (int i = 0; i < count; i++)
            {
                keys[i] = keysStrings[i];
            }
            try
            {
                using (var client = ConnectionMultiplexer.Connect(_conn))
                {
                    var valuess = client.GetDatabase().StringGet(keys);
                    for (int i = 0; i < count; i++)
                    {
                        values[i] = valuess[i];
                    }
                    return values;
                }
            }
            catch (Exception)
            {
                return null;
            }
        }

        /// <summary>
        /// 删除键,即把这条数据删除
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool DeleteKey(string key)
        {
            using (var client = ConnectionMultiplexer.Connect(_conn))
            {
                return client.GetDatabase().KeyDelete(key);
            }
        }
    }
}

2、使用

/**************************************************************** 
 * 作    者:xuxuzhaozhao
 * CLR 版本:4.0.30319.42000 
 * 创建时间:2017/5/8 10:30:26
 * 当前版本:1.0.0.1 
 *  
 * 描述说明: 
 * 
 * 修改历史: 
 * 
*****************************************************************/

using System;
using Common.Redis;

namespace Redis.Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var loginUser = new LoginUser
            {
                Id = 1,
                Name = "xuxuzhaozhao",
                Gender = true,
                CreateTime = DateTime.Today,
                Money = 12.12M
            };
            var updateUser = new LoginUser
            {
                Id = 2,
                Name = "xuchengyi",
                Gender = false,
                CreateTime = DateTime.Now,
                Money = 19.92M
            };

            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("========================================");
                Console.WriteLine("请输入想要对实体进行的操作:");
                Console.WriteLine("1、将实体加入Redis;");
                Console.WriteLine("2、从Redis查询实体;");
                Console.WriteLine("3、从Redis更改实体;");
                Console.WriteLine("4、从Redis删除实体;");
                Console.WriteLine("=======================================");
                var op = Console.ReadLine();
                switch (op)
                {
                    case "1":
                        Console.WriteLine("请输入键名:");
                        var key1 = Console.ReadLine();
                        if(SERedisHelper.Set(key1,loginUser,new TimeSpan(0,0,30,0)))
                            Console.WriteLine("实体成功加入Redis!过期时间为30分钟!");
                        else
                            Console.WriteLine("加入失败!");
                        break;
                    case "2":
                        Console.WriteLine("请输入要查询值对应的键:");
                        var key2 = Console.ReadLine();
                        LoginUser user = SERedisHelper.GetEntityBykey<LoginUser>(key2);
                        if (user != null)
                        {
                            Console.WriteLine("查询成功!实体信息如下:");
                            Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(user));
                        }
                        else
                            Console.WriteLine("没有查询到{0}对应的实体!",key2);
                        break;
                    case "3":
                        Console.WriteLine("请输入要更改的键:");
                        var key3 = Console.ReadLine();
                        if(SERedisHelper.Set(key3,updateUser,new TimeSpan(0, 0, 30, 0)))
                            Console.WriteLine("实体更新成功!");
                        else
                            Console.WriteLine("更新失败!");
                        break;
                    case "4":
                        Console.WriteLine("请输入要删除实体对应的键:");
                        var key4 = Console.ReadLine();
                        if (SERedisHelper.DeleteKey(key4))
                            Console.WriteLine("实体删除成功!");
                        else
                            Console.WriteLine("删除失败!");
                        break;
                    default:
                        Console.WriteLine("请输入数字进行操作!");
                        break;
                }
            }
        }
    }

    class LoginUser
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Gender { get; set; }
        public DateTime CreateTime { get; set; }
        public decimal Money { get; set; }
    }
}

Redis可以到Linux公社资源站下载:

2月 18th, 2018

最近有台windows服务器主机偶尔会出现网络断掉的情况,网络图标感叹号状态。其他电脑的网络都是正常。

关路由器什么事呢?确实,是无关的。

原因分析与处理:

1.可能是服务器主机的ip被人顶掉?这个可能是有的,但应该比较小。

2.系统漏洞导致?

所以,更新了系统漏洞。

3.硬件驱动问题?

重新下载网卡驱动程序,重新安装。

4.网卡硬件问题,那只能换网卡了。现在还无法判断。

鉴于还是有可能出现断网的情况,为此,整理一段检查网络情况的代码,网络无法连接,可自动重启网卡。

代码如下,仅供参考:

@echo off
echo “网卡自动检查重启服务正在进行中…….”
echo “停止服务请按 Ctrl+C”

:begin
echo %date% %time% “ping……” >>ping.txt
ping 192.168.1.1 >>ping.txt
rem echo %errorlevel%
if %ERRORLEVEL% == 1 goto reboot
goto loop

:reboot
echo %date% %time% “网卡已重新启动” >>errlog.log
echo %date% %time% “网卡停用中….”
netsh interface set interface “本地连接 2” disabled
echo %date% %time% “网卡启动中….”
netsh interface set interface “本地连接 2” enabled
echo %date% %time% “网卡已重新启动….”

:loop
ping 127.0.0.1 -n 300 > nul
goto begin

说明:

netsh interface set interface “本地连接 2” enabled

这个本地连接 2 是可以换成某个网卡的,譬如 eth0或者eth1

2月 18th, 2018
UEFI BIOS→ESP分区→\efi\Microsoft\boot\bootmgfw.efi→efi\Microsoft\Boot\BCD→\Windows\system32\winload.efi→加载内核启动系统

上述流程中的ESP分区(标准的ESP分区可以使用Diskgenious软件创建),为UEFI下Windows的引导分区,实际上就是一个FAT格式的分区,并无其他特殊的要求。并不像在传统BIOS下,启动Windows需要“活动的主分区”。在ESP分区下,存在几个重要的文件(“√”表示必不可少的文件):bootmgfw.efi是由bootx64.efi或bootia32.efi改名来的。

EFI/Boot/bootx64.efi(或bootia32.efi)
√ EFI/Microsoft/Boot/bootmgfw.efi
√ EFI/Microsoft/Boot/BCD
EFI/Microsoft/Boot/zh-CN

上面这几个文件可以系统安装光盘中找到,我们只要简单的使用“复制”-“粘贴”,放到ESP分区即可。当然也可以通过命令进行操作:

bcdboot C:\windows /l zh-cn

上述命令成功执行的前提:1、必须存在bcdboot.exe文件(原版Windows8.1/8/7的C:\Windows\System32下有此文件)。2、命令在bcdboot.exe文件所在路径下执行。3、若自行创建的FAT分区(不是标准的ESP分区),则需要执行命令:bcdboot C:\windows /l zh-cn /s Y: (Y代表FAT分区盘符)。

上述操作的意义在于,UEFI环境下安装系统,可以将gho、wim系统映像应用到某分区,然后自行创建一个ESP分区,再通过执行上述命令修复一下启动文件即可大功告成。

详细方法说明:

PE下使用命令行修复UEFI启动模式的引导问题

进入PE(win8),

a、PE为传统启动方式:

打开命令提示符,输入 bcdboot c:\windows /s x: /f uefi /l zh-cn 回车即可。

命令解释:

c代表你的系统所在分区,x:代表esp分区,如果esp分区没有盘符,请先指定一个。

bcdboot – Bcd 启动文件创建和修复工具。

bcdboot.exe 命令行工具用于将关键启动文件复制到系统分区以及创建新的系统
BCD 存储。

“c:\windows” 指定 windows 系统根目录的位置。

/s 指定一个可选的卷号参数,该参数用于指定要将启动环境文件复制到哪个目标系统分区。默认值为固件标识的系统分区。

/f 与 /s 命令一起使用,指定目标系统分区的固件类型,<firmware> 的选项是 “UEFI”、”BIOS” 或 “ALL”。

/l 指定在初始化 BCD 存储时使用的可选区域设置参数,默认值为”简体中文”。

b、PE为UEFI启动方式:

打开命令提示符,输入 bcdboot c:\windows /l zh-cn回车即可。

注意事项:

如果该命令不能顺利执行,请检查你的win8PE的完整性,看bcdboot是否被精简了。

2月 18th, 2018

今天一客户反应windows server 2012启动后,只有黑屏,且有一个CMD对话框,怀疑客户删东西了。咨询后发现,客户删除framework后,就不能启动了。

.Net Framework 4.5是Windows Server 2012 中图形化界面(GUI) 的基础,所以出现了这个问题,解决办法也简单,在命令行输入如下命令:Dism /online /enable-feature /all /featurename:Server-Gui-Mgmt /featurename:Server-Gui-Shell /featurename:ServerCore-FullServer    回车后,等待一段时间,提示你是否重新启动计算机?(Y/N)。

输入Y,系统重新启动。再次进入系统,正常的图形界面了。

1月 19th, 2018

查看设置:netsh firewall show config

关闭windows防火墙:netsh firewall set opmode mode=disable

打开windows防火墙:netsh firewall set opmode mode=enable

12月 31st, 2017
“/”应用程序中的服务器错误。

配置错误

说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。 

分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。

源错误: 


行 8:  <configuration>
行 9:      <system.web>
行 10:       <compilation debug="true" targetFramework="4.5" />
行 11:       <httpRuntime targetFramework="4.5" />
行 12:     </system.web>

源文件: F:\Project\ExportExcel\ExportExcel\web.config    行: 10 

版本信息: Microsoft .NET Framework 版本:2.0.50727.5485; ASP.NET 版本:2.0.50727.5483
复制代码
可以看到错误信息里的 targetFramework="4.5", 而 “版本信息: Microsoft .NET Framework 版本:2.0.50727.5485; ASP.NET 版本:2.0.50727.5483”,
那么问题就是FrameWork版本不一致导致的。

解决办法:
打开IIS管理器(win+r,打开运行窗口 输入 inetmgr)进行如下操作,这里要选择 v4.0
然后确定。
图片1